{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "543c166d-dac2-45e2-8a71-20bf28090b1c",
   "metadata": {},
   "source": [
    "# 2.线性回归"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b7682e3a-ea4f-47ac-ab85-d9d88dcbab96",
   "metadata": {},
   "source": [
    "## 2.1 基本概念"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7ea4f67d-673b-4814-8d85-aaa4b37867eb",
   "metadata": {},
   "source": [
    "线性回归（Linear Regression）的核心思想是通过建立 “自变量（特征）与因变量（目标值）之间的线性关系模型”，来解释数据规律或预测未知结果。它的本质是找到一条或多个维度下的超平面能 “最好地拟合” 数据分布的线性函数。线性回归根据自变量的数量，分为**简单线性回归**和**多元线性回归**两类，核心都是用线性方程描述变量关系。\n",
    "\n",
    "<img src=\"https://zh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20250823140718252.png\" alt=\"image-20250823140718252\" style=\"zoom: 40%;\" />\n",
    "\n",
    "寻找一条直线，最大程度的“拟合”样本特征和样本输出标记之间的关系。图中样本特征只有一个（房屋面积），称为**简单线性回归**\n",
    "\n",
    "与K近邻算法不同的是：\n",
    "\n",
    "- 简单线性回归讨论的是Y轴随着X轴变换的线性规律（X轴是自变量，Y轴是因变量）\n",
    "- K近邻讨论的是X轴与Y轴标记数据的分布情况（X轴和Y轴都是自变量，标签为因变量）\n",
    "\n",
    "<img src=\"https://zh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20250823143722131.png\" alt=\"image-20250823143722131\" style=\"zoom:40%;\" />"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5a48df12-24ac-4245-bef0-bb92b8921ddc",
   "metadata": {},
   "source": [
    "## 2.2 数学原理"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c40ad133-bfe2-4433-8958-cf5ef56b3459",
   "metadata": {},
   "source": [
    "先从简单线性回归入手：\n",
    "\n",
    "<img src=\"https://zh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20250823145026145.png\" alt=\"image-20250823145026145\" style=\"zoom: 40%;\" />\n",
    "\n",
    "如图所示，假设我们找到了最佳拟合的直线方程：\n",
    "$$\n",
    "y=ax+b\n",
    "$$\n",
    "则对于每一个样本点 $x^{(i)}$ ，根据我们的直线方程，预测值 $\\hat{y}^{(i)}$ 为：\n",
    "$$\n",
    "\\hat{y}^{(i)}=ax^{(i)}+b\n",
    "$$\n",
    "真值为 $y^{(i)}$，则我们希望  $\\hat{y}^{(i)}$  和  $y^{(i)}$  的差距尽可能的小，表达公式为：\n",
    "\n",
    "$$\n",
    "(y^{(i)}-\\hat{y}^{(i)})^2\n",
    "$$\n",
    "\n",
    "> 平方的目的\n",
    "> - 放大较大的误差 ，让模型更关注 “预测错误严重” 的样本\n",
    "> - 另其可导，方便求出最优解的 $a$ 和 $b$\n",
    "> - 与统计意义一致性，现实中很多误差可近似正态分布，符合中心极限定理\n",
    "\n",
    "考虑所有样本，表达公式为：\n",
    "$$\n",
    "\\sum_{i=1}^{m}(y^{(i)}-\\hat{y}^{(i)})^2\n",
    "$$\n",
    " \n",
    "结合预测值的公式：\n",
    "$$\n",
    "\\sum_{i=1}^{m}(y^{(i)}-ax^{(i)}-b)^2\n",
    "$$\n",
    "我们的目标是，找到 $a$ 和 $b$ 使得上面这个公式尽可能的小\n",
    "\n",
    "我们称该公式为：**损失函数 / 效用函数**\n",
    "\n",
    "- 通过分析问题，确定问题的损失函数或者效用函数\n",
    "- 通过最优化损失函数或者效用函数，获得机器学习的模型\n",
    "\n",
    "近乎所有的参数学习算法都是这样的套路！\n",
    "\n",
    "求解思路为最小二乘法问题：最小化误差的平方\n",
    "$$\n",
    "a=\\frac{\\sum_{i=1}^{m}(x^{(i)}-\\bar{x})(y^{(i)}-\\bar{y})}{\\sum_{i=1}^{m}(x^{(i)}-\\bar{x})^2} \\quad\\quad b=\\bar{y}-a\\bar{x}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5eddc76f-5e50-4b32-8d72-fb9f00241517",
   "metadata": {},
   "source": [
    "## 2.3 简单线性回归的实现"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b471da5b-c953-452c-bde1-d12511b40132",
   "metadata": {},
   "source": [
    "**（1）准备数据**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "b6fa5574-55f3-42db-8f89-6a8bb6306b63",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "x = np.array([1.,2.,3.,4.,5.])\n",
    "y = np.array([1.,3.,2.,3.,5.])\n",
    "plt.scatter(x, y)\n",
    "plt.axis([0,6,0,6])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6e767cbc-413f-4521-b130-5ba0b26917e3",
   "metadata": {},
   "source": [
    "**（2）计算a和b**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "67a8268c-b82c-41cf-bd62-d80f288fe0b5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a = 0.8\n",
      "b = 0.39999999999999947\n"
     ]
    }
   ],
   "source": [
    "x_mean = np.mean(x)\n",
    "y_mean = np.mean(y)\n",
    "n = 0.0 # 分子\n",
    "d = 0.0 # 分母\n",
    "for x_i, y_i in zip(x,y):\n",
    "    n += (x_i - x_mean) * (y_i - y_mean) \n",
    "    d += (x_i - x_mean) ** 2\n",
    "a = n / d\n",
    "b = y_mean - a * x_mean\n",
    "print(f\"a = {a}\")\n",
    "print(f\"b = {b}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf878987-a3bf-4d21-b614-6b6326912c72",
   "metadata": {},
   "source": [
    "**（3）绘制预测直线方程和预测值**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "0e4a082c-aa20-4ac4-a6aa-fb65bdca14e0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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VCghIUHl5eXyeDx+vbaRP08+c+aMduzYoZkzZ9a6Pnz4cH322WcXfE12drbmzJlz3vWEhAR/3hoAAISA48eP2xs2/vGPf6iqqkrXXnttrevXXnutSkpKLviaWbNmafr06TXj8vJydejQQYcPH/a7WPzTuYTJDFH98VkGDp9lYPA5Bg6fZeCc60y0aNHC79f6FTbOcblctcaWZZ137Ry32y23233edY/Hw3/4AIiNjeVzDBA+y8DhswwMPsfA4bMMnKgo/9eW+PWKa665RtHR0efNYhw7duy82Q4AAADJz7DRpEkT3XzzzcrJyal1PScnR/379w9oYQAAIDL43UaZPn26fvzjH6t3795KTU3VsmXLdPjwYWVkZFzW691ut7Kysi7YWsHl43MMHD7LwOGzDAw+x8Dhswyc+nyWfi99lcymXs8995yKi4uVnJys+fPn69Zbb/X7zQEAQOSrU9gAAAC4XJyNAgAAbEXYAAAAtiJsAAAAWxE2AACArYIaNjiavv4++eQTpaWlqU2bNnK5XPrLX/7idElhKTs7W3369FHz5s3VunVrjRkzRvv27XO6rLC0dOlSde/evWaHxtTUVK1bt87psiJCdna2XC6Xpk2b5nQpYefpp5+Wy+Wq9YiLi3O6rLB05MgRTZo0SS1btlTTpk3Vs2dP7dixw6+fEbSwwdH0gXHy5En16NFDixcvdrqUsJabm6vMzExt2bJFOTk5Onv2rIYPH66TJ086XVrYadeunebNm6ft27dr+/btGjJkiEaPHq3CwkKnSwtr27Zt07Jly9S9e3enSwlbXbt2VXFxcc1j165dTpcUdr755hsNGDBAjRs31rp167R79269+OKLuuqqq/z7QVaQ9O3b18rIyKh1rXPnztbMmTODVULEkWStWbPG6TIiwrFjxyxJVm5urtOlRISrr77aeu2115wuI2xVVlZaN954o5WTk2Pddttt1tSpU50uKexkZWVZPXr0cLqMsDdjxgxr4MCB9f45QZnZOHc0/fDhw2tdv9TR9EAweb1eSarTaYb4p6qqKq1cuVInT55Uamqq0+WErczMTN1111264447nC4lrB04cEBt2rRRYmKifvSjH+nLL790uqSw88EHH6h3796699571bp1a/Xq1UvLly/3++cEJWzU5Wh6IFgsy9L06dM1cOBAJScnO11OWNq1a5eaNWsmt9utjIwMrVmzRklJSU6XFZZWrlypnTt3Kjs72+lSwtott9yit956Sx9++KGWL1+ukpIS9e/fX8ePH3e6tLDy5ZdfaunSpbrxxhv14YcfKiMjQ1OmTNFbb73l18+p0xHzdeXP0fRAsEyePFlffPGFNm3a5HQpYatTp07Ky8tTeXm5Vq1apfT0dOXm5hI4/FRUVKSpU6fqb3/7m2JiYpwuJ6yNGjWq5p+7deum1NRUdezYUW+++aamT5/uYGXhpbq6Wr1799bcuXMlSb169VJhYaGWLl2qBx544LJ/TlBmNjiaHqHq0Ucf1QcffKCPP/5Y7dq1c7qcsNWkSRPdcMMN6t27t7Kzs9WjRw8tXLjQ6bLCzo4dO3Ts2DHdfPPNatSokRo1aqTc3FwtWrRIjRo1UlVVldMlhq0rr7xS3bp104EDB5wuJazEx8ef90tDly5d/F7cEZSwwdH0CDWWZWny5MlavXq1PvroIyUmJjpdUkSxLEs+n8/pMsLO0KFDtWvXLuXl5dU8evfurYkTJyovL0/R0dFOlxi2fD6f9uzZo/j4eKdLCSsDBgw4b1uA/fv3q0OHDn79nKC1Uep7ND2MEydO6ODBgzXjQ4cOKS8vTy1atFD79u0drCy8ZGZm6u2339b777+v5s2b18y6eTweXXHFFQ5XF15mz56tUaNGKSEhQZWVlVq5cqU2btyo9evXO11a2GnevPl59w1deeWVatmyJfcT+emJJ55QWlqa2rdvr2PHjumZZ55RRUWF0tPTnS4trDz22GPq37+/5s6dq/Hjx2vr1q1atmyZli1b5t8Pqvd6Fj8sWbLE6tChg9WkSRMrJSWFZYZ18PHHH1uSznukp6c7XVpYudBnKMl6/fXXnS4t7Pzbv/1bzf+vW7VqZQ0dOtT629/+5nRZEYOlr3Vz3333WfHx8Vbjxo2tNm3aWPfcc49VWFjodFlhae3atVZycrLldrutzp07W8uWLfP7Z3DEPAAAsBVnowAAAFsRNgAAgK0IGwAAwFaEDQAAYCvCBgAAsBVhAwAA2IqwAQAAbEXYAAAAtiJsAAAAWxE2AACArQgbAADAVv8HvOM8MAPyQhwAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "y_hat = a * x + b\n",
    "x_predict = 5.5\n",
    "y_predict = a * x_predict + b\n",
    "plt.scatter(x,y)\n",
    "plt.scatter(x_predict, y_predict, color=\"green\")\n",
    "plt.plot(x,y_hat, color='red')\n",
    "plt.axis([0,6,0,6])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b3edbd30-2a1a-4e9b-9c86-c62de80cbb87",
   "metadata": {},
   "source": [
    "## 2.4 自定义简单线性回归"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e3d067a-8da8-4f8c-b42b-2a43cbe65adc",
   "metadata": {},
   "source": [
    "**（1）自定义SimpleLinearRegerssion**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6d7ccd94-a358-49cf-93aa-aeb13b0d8197",
   "metadata": {},
   "source": [
    "> [MyMLTools/SimpleLinearRegerssion.py](MyMLTools/SimpleLinearRegerssion.py)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ba95c692-8954-4e74-907c-630744bf2f53",
   "metadata": {},
   "source": [
    "**（2）准备数据**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "92bca1d4-d2d0-46f4-89e2-f3fac378ccfb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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mnsdvaju6dy5c9XX16cXXnjBGvP888+rr68v+/ueVVnwOGMusf7hD39ovPzyy8bKlSuNqqoq409/+lOhL61kLF++3Kiurja2bt1qHDhwwPr5y1/+Yo25++67jerqauPRRx81du/ebVx99dWuS/pOPfVU4xe/+IXx29/+1rj44ovH9TLJIOyrkwyD+xyFF154wSgvLze+/e1vG6+99prxk5/8xDjxxBON1tZWawz3ORrXXXedccopp1hLrB999FFjypQpxte+9jVrDPc6vKNHjxo7d+40du7caUgy7r33XmPnzp1W65Co7umll15qzJ4929ixY4exY8cO48wzz2SJdSH8x3/8h5FIJIyJEycaH/nIR6ylwQhGkuvPj370I2vM8ePHjZaWFqO+vt6Ix+PGBRdcYOzevTvpPAMDA8YNN9xgTJ482aisrDQWL15svP7663n+NqXFGcRwn6Px5JNPGo2NjUY8Hjc++MEPGj/4wQ+S3uc+R+PIkSPGTTfdZJx22mnGCSecYLz//e83br/9dmNwcNAaw70O71e/+pXr/yZfd911hmFEd08PHz5sXHvttcakSZOMSZMmGddee63R09OT9fXHDMMwssvlAAAA5B81MQAAoCQRxAAAgJJEEAMAAEoSQQwAAChJBDEAAKAkEcQAAICSRBADAABKEkEMAAAoSQQxAACgJBHEAACAkkQQAwAAShJBDAAAKEn/P7eosQTfsJYtAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "m = 1000\n",
    "x = np.array([i for i in range(m)])\n",
    "y = np.array([i * 2 + np.random.randint(m / 3) for i in x])\n",
    "plt.scatter(x,y, s=1)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3c9d2369-d5b1-496d-8575-32da595e07da",
   "metadata": {},
   "source": [
    "**（3）调用使用**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "7082bbe6-4f41-4b21-97f7-721c48e864ab",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.003069933069933\n",
      "163.30156843156863\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjEAAAGdCAYAAADjWSL8AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAZS1JREFUeJzt3Xd8VFX6x/FPSEKIEZIgQghiRFZRCM2gFAtgAZQiay9BV7GhgFFRwRaxACI2LFGUtcW1/NaCilIUQRECbgABQVSEiEBEMQkQQ0i5vz+ud5hypyWTMsn3/XrlBZk5c+fMVXeefc5zzhNhGIaBiIiISJhpUtcTEBEREakKBTEiIiISlhTEiIiISFhSECMiIiJhSUGMiIiIhCUFMSIiIhKWFMSIiIhIWFIQIyIiImEpqq4nUFMqKyvZsWMHzZs3JyIioq6nIyIiIgEwDIO9e/eSnJxMkya+cy0NNojZsWMH7du3r+tpiIiISBVs27aNI444wueYBhvENG/eHDBvQosWLep4NiIiIhKIPXv20L59e8f3uC8NNoixlpBatGihIEZERCTMBFIKosJeERERCUsKYkRERCQsKYgRERGRsKQgRkRERMKSghgREREJSwpiREREJCwpiBEREZGwpCBGREREwpKCGBEREQlLCmJEREQkLCmIERERkbCkIEZERETCkoIYERERCUp2Th4nT1tEdk5enc5DQYyIiIgEJWvxZrYXlpC1eHOdziOqTt9dREREwkZ2Th5ZizeTlpIIwJgBHet0PgpiREREJCBWBgbg64mn1/FstJwkIiIiAUpLSSQyAkcmpq4piBEREZGA5OYVUGGYf9YHCmJEREQkIGMGdKRdQmyd18JYIgzDMOp6EjVhz549xMfHU1RURIsWLep6OiIiIhKAYL6/lYkRERGRsKQgRkRERIJWHw68UxAjIiIiHrJz8ugxeQE9Ji+wDVTqw4F3CmJERETEQ9bizRSWlFFYUmYbqNSHIl8V9oqIiIiH7Jw8ZszfBMCEwZ0AM7AZM6Aj6X1Saux9g/n+VhAjIiIifvWYvIDCkjISYqNZkzmoxt5Hu5NERESkSupDwW6gFMSIiIg0QFUNRrwV7E4Y3Il2CbGOpaX6QMtJIiIiDdDJ0xaxvbCEhNho4mKiXGpZrG7Udo+lpSSSm1dQ47Uv3gTz/a0u1iIiIg3QmAEdyVq8meLScpfMivWYtevIClSsDEx+UQmTz02tkwAmWFpOEhERaWCcMy3WMpAV1GwvLAHw2B49ZkBHIiOgwsBjKam+1skoEyMiItLAONe1fD3xdJesirdt0s4ZGfezX5yvV58yNMrEiIiIhClvGRL3g+iscYBLUOP++vQ+KR5Bj9316gsV9oqIiIQpq3i3XUIsX088Pehx3h63K/ytLTonRkREpIHLzsmjuLSchNhovxkSb5kUb4+7b7OurzUxCmJERETCkNXbKC4myuvykMXbMlGgy0ceZ8fs3Annnw8ffVRDny4wCmJERETqObvgxC6LYgUbmXPWVytr4h7cON6r/9Hw739D587w3nswfjyUl1f9g1WTghgREZF6zjkT4q1IF3xvk/bH15JRep8Uvr7oKM64eRSMHg2Fhew+rit88AFE1d1GZwUxIiIi9Yx7QOGcdfHWFsDqOt0kIoIIIC0lMaj39FYH88bXP8MTT0DXrrT9Zin7o5oyZcBV/DP9MejePSSft6p0ToyIiEg9434ui/Xj/PyYAR1ddhFZNTKW3LyCoFoJWNdwroOJ+3EjPZ4bC9s2AvBbz95cc8r1/BSfREy5QXZOXp2eG6Mt1iIiIvVMoFucnbdIjxnQkRnzN1FaXgFATFQkgEtg428rtkNpKWtvupPjX3mW6IpyaNECHn0UrrkGmjQJeGt3VWiLtYiISBjztmvInfMyU3qfFNZkDmLjg2fTMi7GEbxERuD40/3wO9vi3xUrIC2NbrOfMgOYESNgwwa47jpo0sTjfeuSMjEiIiL1UHUOnHN+LXi2GrAyKZERHGz2WFwM99wDTz0FhgGHHw7PPAMXXggRESH/fN4E8/2tIEZERKQeqsklm/FvrubDb3cAfy8x9aqEa6+FrVsB+LTnWeydOp2LBvcI6fsGQstJIiIiYa66Sza+loxy8woASCzdx2PznoKzzoKtW9mX1I6rLprMmEE389TqP+vtSb0WBTEiIiK1LJDgIJC6GF/X8bYVG8wA6fJfv2HZa2Pps+RDKongv31H8s8bnueLDmmO+hlf16gPFMSIiIjUAueAI1TBgb9AxTaTs3Mn6Y/eysNvTCb2zz8oSunImBueYv/jT3Ll4K60S4h11MnUlwJeb1QTIyIiUgusGpeE2GjHYxMGd/LItART0BvIWMeY/keTvnER3HYbFBaaJ+1OnAh33w3NmlX784VKMN/fOuxORESkFqSlJJJfVEJpeSUlZRW0S4i1DTzcD7rzxf0QPDtZizfTZOsWOr10O2xe9fdk0mD27Do/cbe6tJwkIiJSC3LzCqgwICaqic8lGvclnGoV11ZU8NTOL1jw77GcuHmVmXF59FHIyQn7AAaUiREREakVzsf622VPnJeGnLdUB5OZcbF+PYweTa+VK83fBwyAF1+Ef/yjmp+k/lAmRkREJIS8ZU787TbyVqQbSHGty3uWlkJmJpxwAqxcabYMmDULFi2yDWDq+zZqXxTEiIiIhFBVdx55C1asXUJZizd7DTSs9/zytY/M4OWBB6Cs7GDLgGuv9Xrqbn3fRu2LghgREZEqsstiVHVbsq9Mja9AIzsnj8o9e3l48Uu88Px4M2hp3Rrefhs++ADatfM55/q+jdoXbbEWERGpoppsDQAH62TSUhLJzSuwrafJGD2d2959nPZFv5kPXHEFPP44HHaY7Rbs6s65Oj2dAqG2AyIiIrUgLSWRyAjzz+rwVpdiZWBy8wo8sjTvzP+Wub2G8OS/76R90W/sS2oHn34Kr74Khx3m8nrnDE51My/1afkpqCBm6tSpnHjiiTRv3pzWrVszcuRINm3a5DLGMAzuv/9+kpOTiY2NZcCAAXz33XcuY0pLSxk3bhytWrUiLi6OESNG8Ouvv7qMKSgoYNSoUcTHxxMfH8+oUaMoLCys2qcUERGpAda2aasXUVUFXdT77rucccFAhubOp5II/q/vP/k4ez4MGeL19VagBPhtZ+BLfVp+CiqIWbJkCTfddBM5OTksXLiQ8vJyBg0aRHFxsWPM9OnTefzxx3nmmWf45ptvSEpK4qyzzmLv3r2OMRkZGbz//vu89dZbLF26lH379jFs2DAqKiocYy677DLWrFnDvHnzmDdvHmvWrGHUqFEh+MgiIiKhEYov9OycPIpLy0mIjSYtJdGRkcnOyWPG/E0Ul5YfHLxzJ5x3HlxwAYftK+DnVu256urHuP200Tz9zW8e13auswlVBiWQnk61pVo1Mb///jutW7dmyZIlnHbaaRiGQXJyMhkZGdx5552AmXVp06YNjzzyCNdffz1FRUUcfvjhvP7661x88cUA7Nixg/bt2/PJJ58wePBgNm7cSOfOncnJyaF3794A5OTk0LdvX77//ns6derkd26qiRERkZrirS7EX72IvxoVwOPvAO3im/F1661my4CiIsqbRPJsnwt5/+wruebM45kx31wVsWtjEMjcqvpcTai1mpiioiIAWrZsCcCWLVvIz89n0KBBjjExMTH079+fZcuWAZCbm0tZWZnLmOTkZFJTUx1jli9fTnx8vCOAAejTpw/x8fGOMe5KS0vZs2ePy4+IiEiwAjk3Zcb8TWwvLHEEDxZ/2Q5/NSruf0+IjaZLyR/899374JproKgIevVi3qsf887wa7nmzONJ75NCXEwUhSVlPrMsVd395O2z1gdVPrHXMAxuvfVWTjnlFFJTUwHIz88HoE2bNi5j27RpQ15enmNM06ZNSUxM9BhjvT4/P5/WrVt7vGfr1q0dY9xNnTqVyZMnV/XjiIiIANU4IRfXU3kDfd69/5Hj7xUVpC97Fx65B0pKIDYWHnwQbr6ZYVFRDAvifasybysDU1pe4eOVdavKQczYsWNZu3YtS5cu9Xguwu1AHcMwPB5z5z7Gbryv60yaNIlbb73V8fuePXto3769z/cUERFxF0hAMGFwJ9sxgTRkDMi6dWbmxWoZMHCg2TKgo/2cqvu+dq+3grmE2GhaxsXUi0Jed1UKYsaNG8eHH37Il19+yRFHHOF4PCkpCTAzKW3btnU8vmvXLkd2JikpiQMHDlBQUOCSjdm1axf9+vVzjPntN88Cpd9//90jy2OJiYkhJiamKh9HRETEIZCAoKpBg98sT2kpTJli/pSXmy0DHnsMRo/2euJuVfmrdfHX66k+CKomxjAMxo4dy3vvvceiRYvo0KGDy/MdOnQgKSmJhQsXOh47cOAAS5YscQQoaWlpREdHu4zZuXMn69evd4zp27cvRUVFrLQiUGDFihUUFRU5xoiIiNQ0X/UxgfYcch7nczfT8uXQs6fZMqC8HM491zx995prXAKYUPU68le/U592IXkT1O6kG2+8kf/85z/MmTPHZYdQfHw8sbFmJfUjjzzC1KlTefnllznmmGOYMmUKixcvZtOmTTRv3hyAMWPG8PHHH/PKK6/QsmVLJkyYwO7du8nNzSUyMhKAs88+mx07dvDCCy8AcN1115GSksJHH30U0Fy1O0lERKrL1+m2gZ5862/cW4s20OTee7lw+ftEGIbZMuCZZ+CCC2yzL6E6Jdg5EwPUm6xLje1OysrKoqioiAEDBtC2bVvHz9tvv+0Yc8cdd5CRkcGNN95Ir1692L59OwsWLHAEMABPPPEEI0eO5KKLLuLkk0/mkEMO4aOPPnIEMABvvPEGXbt2ZdCgQQwaNIhu3brx+uuvBzNdERGRarFO5D0srmmVeyRZu4yKS8s9sycLFtD//NO5aNl7ZgBz5ZVm9uXCCz0CGCsDk5aSWKWzadwzOL7OkAmXztbqnSQiIo1CMOedWGOLS8spLCkjMgIqDFyyH+7X83V99+zJO/O/5dC77uCcVQsA2JnQhg2Z0zkj4wqvc7KuERkBk89NDfo8F7sMjrfeTDXdE8oX9U4SERFxE8yJtdZYMAOXod2SPbIpztfLzskjc856r9d3ZG36Hw3//S9nXjCAc1YtoJIIvr/oX7Td9pPPAAYO9meqMLB9D3+fzy5zZL3myx9+9zu2PlIQIyIijYL1xex8tL+/sRMGd+Lriacz89KeHgfKOX/RZy3eTIUBkRHYfvGn90nh6yuOI336LXDhhbTcV8iPh7XngvTpjO45Cg491O/8rf5M3t7DX+BhV6hrvQZwCYDCoagXtJwkIiKNTFWXSvwdze989D84Fcr2PhJmz4YJE8wTd6OiYNIk/nNmOs8u+zXgYtpQHP9f1XYJtSmY728FMSIi0iDV9he2XQ+kkyoKeGfVy7DI7B5Nr15mQNOtW8jetypz9FZXUx+oJkZERBo9bzUiNbVU4rycc+OpR3Hbuo/4z9PXmgFMbCzMmGGeBVPFACYUO4bGDOjoKFKubjfr+qDKbQdERETqs2D6CYUiO+M4xXfdOvOE3W++MZ/w0zLA+f3ddwk5C6Snk7/PYT1WnT5L9YmWk0REpNELyZbi0lJ4+GGYOtU8cTc+3mwZcPXVflsGOC/zuG/ltgRyOF1dbo0OFS0niYiIBCg7J4/i0nISYqP9Zie8LulYLQMefNAMYEaONA+tC7DnkbUUNbRbstcdRr4Op3O/TkPIsgRCy0kiItLg+VpmyVq8mcKSMtolxPpdSvJY0tm3D+6+G55+GqyWAc8+C+efDxERfnc0OT8XzDKWt6WykHXRDhPKxIiISINily3xlrkIJgsDbpmOBQsgNRVmzjQDmH/9CzZudOl55OsAumAO33MXLue41DQFMSIi0qDYBQfellmsLExcjLkw4W/3T3qfFL6+rgfpz2fC4MGQlwcpKTB/Prz8MrRs6TLerm9SID2QwqV3UV1TECMiIvVeMF/qdgGLt8yFc5AxY/4mr9mak6ctInv5Vvi//4Pjj4dXXzWzLePH89a/P+HkVVG2c0vvk+Jx0q8VZOXmFXjNplQnS9OYKIgREZF6L5gvdV9LLXadnK0gA7DtNp21eDNl236l/TXpcNFFsGuXGch8/TU89RRPr8z32QHaPRsTSPFtYyvQrSptsRYRkXrP/Vj/qtaCWFuQE2KjHY+dduzhjrNZrGDJsUXZMMi5ezpdnniQ5vuLzZYBd91l/sTEOObmXKBrt825IWx9ri3aYi0iIg2K3bJMVTg3PCwsKaOwpMxlWcclA7J5M5xxBn2mTqT5/mL+OL47o27KIvvsqx0BjDU358yP8zUCqX8JhmplXCkTIyIiYSGQw96CuZbXzE55OTz1FNx7L5SUmC0DHnqIU/d3ZdueAwFnU7Jz8sics97j8Dq7z2F3Uq/d9uzGkNFRA0gUxIiIhKNAj/+vsS/ztWvNA+r+9z/z99NPh1mzoGPHoFsTeGu2aNco0vmkXmtZq7i03HF+jV0A1FC3VyuIQUGMiEg46jF5AYUlZSTERrMmc5DXcXZf5uPfXM3ctTsY2i2ZmZf2DOq1lJbCQw/BtGlQXs6BQ5vz2KDraD9hLOl9jwr6c/jK9HjLxHz5w++OMdY9iIuJ8tlPqSFSTYyIiDRY3rIRc9fuoMIw//TFY6fTsmVmy4CHHnK0DLhw3Eu8cMxAspb8XKU5Op8/4x54ONfQWH+feWlPl11S7RJimTC4E19PPJ3cvAJtt/ZCQYyIiNQbEwZ3ol1CLKcde7jXAlZv262HdksmMsL802JXCGttea7cs5fvL7oKTjnFPGm3TRvzHJj33uPCEb09CnGre1aNHedrWq+xghe7QmFxpeUkERGpd3zVvLhnYuwyM9ZjdnUlALdc/Qi3vfs4R+zZZT7wr3+ZHafdTtwNdE418Tkbq2C+v9UAUkRE6h1vDQ7Bs8mhe2bGOXhJiI12zWLs3g233soTr70GwL62R3DoK7NhkPf6G+c5zZi/yXFoXSjqU3x9TvFPy0kiIhLWnJdbrIAGXOtK0nsfaS4Vde4Mr71mtgzIyODj7PleWwZYSz3j31zNydMWAXg9q6aq57eokWP1KIgREZF6p6ptBtzrSgDOvesdtg0YfLBlQOfOZsuAJ57waBlgsc542V5Ywty1Oxxj7OpTnMeq+LZ2aTlJRETqnZAssxgGv06fyeufvECL0mKIjjbbBUyaBDExZOfkUVxaTkJstG136woDR6Gw8xZn96yJ81gtC9UuFfaKiEhI1IeD2KxC2ZPK/+SdVS/DF18A8Mfx3Wn19uvQtavH2ECKh32pD5+7IdFhdyiIERGpDc5f4B7NE/28piYOcXtj6WYKpjzKDYteJap0v6NlADffDJGRXuceqvdXQFN9CmJQECMiUhucsxnOS0CBtAxwPmrfW9DjHvD4DHzsWga8+CIcfXSoPq5fdvejsZ24W106sVdERGqFc6Grt5027jt3rNd0SY4nMgLSUhJtx8HBAt+PvjWLaz/8+0/rSP/snDwGPDSPdVeNh7Q0M4CJj4fZs+Gzz+Doo2u187PdTinnwmAJLQUxIiJSZYFsEZ4xf5NL4GG9ZnfxASoMyM0rAOx3JFlBQbPoSNtrf/Xqh7z0xLV0feVps2XAP/9pnr579dXmNmov160N1tyHdkvWibs1RLuTREQkZIKpCXHfgWS3I8naDWQ1VCwtryAmKpKJpx4B48fz/AvPEGEYlLRsReys5+H88z3eJy0lkfyiEkfGp7qfC/D6GZ0DJp3/UvNUEyMiIn4FGpzY7fiparGr19fNmwfXXw+//GL+ftVVMGOG15YBoTja3/kazqcBu3faVmFv9amwFwUxIiKhZH2JJ8RGExcT5TUjEcovcY/gY/duuOUWeP11c8BRR8GsWXDWWT6vE2gWJdBrzJi/yWsQI9WnIAYFMSIioWTXUBHwCGxCmX1wBA79jyZ920oYOxZ+/92sdbn5ZnPrdFxcUNcMJivjLSCryS3ioiAGUBAjIlIT7LIazssrIQ9mtm+HG2+EDz80f+/c2dx51KePx3zsdkVVJ1PkL+BRB+qaoS3WIiJSI5x3I1l/nzC4k0tmJiS7gCorzaWizp3NACY6GjIzYdUqRwADBwtpZ8zf5HV7tvN8rP5KWYs3+91ybdcnKZjnpeYpEyMiIiERsnqYn36Ca6+FxYvN3086ycy+pKZ6fc8/iw9QUlbhUqfibT7KoNRvWk5CQYyISNgpL4cnn6T87nuIOlBKebNYoqZO4Y0TR/DcV1t9Bkc9Ji8IuNg22CUoqV1aThIRkSoL5oRb57F2r/N3Lev5j1//1Fwmuv12og6UsjSlO5eOmwUZGTz31Va/y1TWktaEwZ38ztnXAX11dTCeVI2CGBERcRHMF7nzWLvX2T3mHNjMXriRSz6cxZB/DYfcXEhIYNnd07nz+sc497xTgcBqTwI5OdhXQJWdk0ePyQv4s7iU2OgmFJeW10qbAqkeBTEiIo1IIFmWtJREl55Gvl5vBRhpKYkUl5aTEBvtEmzYBSBWYLP0lTm8+fwYxi1/m6jKCjjvPNiwgX4P3c7Xk85wBCSBBCiB8BacZefkkTlnPYUlZZSUVXKgvJLCkjJlY8KAghgRkUYkkCxLbl6BS08jX6+3AozcvAIKS8qIi4lyCTbsApBxJ7ZhxpcvkTUrg6QdW/k9LoG7L8+Ed9+Ftm0D/izBNnb0ltHJWryZCgMigITYaPU6CiPqnSQi0ojY9ScKZoy35wK5LgDz5nGJU8uAn4ZdxNgTLiP97B5BfxbngCqQLI21Ldyd89xVzBtetDtJRESAGt6Z494yoEMH8xyYM8+s8iW1k6hh0u4kEREJilUX4q1mpCq7lQCyl2/lvsvuZf8xncwAJiLCDGbWrQsogPH13r5qZYJdapLwpCBGRKQRcv+St+pCIiOwrRmpym4ltm8nZfTlPPDmQzQr2M3PbY5i3qx34fHHA+555Gt30/g3V3sNVLRVunFQECMi0ghZX/KZc9aTnZPnKHqdfG4q6X1SHFuOe0xeQFpKokehq7dMx5gBHTmiRQyPFa6Azp05deMyyiKjyBowisGjnuDBP+I95uIra+Jrd9PctTu8Birur1NmpmFSTYyISAPmrQnijPmbKCopwwDb4/eto/mxed5aeqowbF7r3jKgd2+YPZvsvYd6rV8Jtg1AVbpIq9VA+Ajm+1u7k0REGjC7HTxZizd7dJ12N2ZAR2bM3+T4OxwMHopLyz2XnsrL4Ykn4L77YP9+OOQQePhhGDcOIiNJB6+BRsA7m/7mbZeRL8G+h4QHZWJERBoAbzt1vGViqrKrx8pmOAc/6X1S4NtvYfRo88RdMAt2Z80ydyDVwGfy9xor+LJaEGgHU3hRA0gUxIhI41LV5ZJgAgWPsfv3w4MPwvTpZiYmIQEef5zs4waSteRnn9cM5H0D/UzO17IyT2AudQFaRgoz2mItItLIBNJfyJlV6Dpj/qaAd/G4bGn++mvo0QOmTDEDmPPPh40b4aqryFrys99rBrJ7KNDP5HytMQM6khAb7Wh/EOx9kfCimhgRkTDmnIWwMhHgvf7EYn3xJ8RGB/clv3cv3HUXPPssGAYkJZl/P+88xxBv9SfOc01LSSS/qMTRn8kuM+Or9sV52ei0Yw93vK/da7SM1HApiBERCWNWMDJj/ib27i+jwiCgY/h9HbXvbaln0ROv0HnynSQV7TIfuPpqmDEDEl0bRToXELv/7px9sfozOe92CrSFgFWcDOY1tFTUOGk5SUQkjFnLJYDXw+rs+Drt1mOp548/YNQoTr/1KpKKdrE9sS0sXAizZ3sEMF6vgevykPPffR205+tzOy8bSeOkwl4RkTASzC6kYF5vO6b/0aT/ssLcJv3771Q2acLb/c4j9+pbWP7b/oCu4X6WS6C7pdQXqfHS7iQUxIhIw1TdQ9v8vd4KHm7rfAjnvTQFPvrIfKJLFzPz0ru34xqREThO+LVjdyier/e322WkXUWNj3YniYg0UMHstrE7at/59XbPP/bpRvovfo+zLjrDDGCio2HyZFi1yjx99+9rREbgqGHxxm6ZyNf8net7ikvLHUtFahkg3igTIyJSz4RiKcVna4C/eWRFfvyR/511Ab3y1poD+vSBl14yszBVmGOwn8P5RODCkrKAsjfS8CgTIyISxkLRgTmQYlkrK3LjKSnmgXXdutErby0l0c34JuM+WLrUNoAB34XBwYyxGz9hcCeXbI3OehFvlIkREalH3I/Nr04mJqAsyJo1ZsuAVavM321aBqjIVmqTMjEiImHArtbDOv8kLibK5zKNvxoR9yyIx2v274e774ZevcwAJiEBXn4ZFizw6HkUisyQSE0IOoj58ssvGT58OMnJyURERPDBBx+4PP+vf/2LiIgIl58+ffq4jCktLWXcuHG0atWKuLg4RowYwa+//uoypqCggFGjRhEfH098fDyjRo2isLAw6A8oIlJfOReyWgFGIEsnVQkqXF6zdOnBlgEVFeQNPIfhN75I9nEDISLC47Xe5hRMwW12Th49Ji+gx+QFHuN9PSfiS9BBTHFxMd27d+eZZ57xOmbIkCHs3LnT8fPJJ5+4PJ+RkcH777/PW2+9xdKlS9m3bx/Dhg2joqLCMeayyy5jzZo1zJs3j3nz5rFmzRpGjRoV7HRFROoV5y9+54PqrAAjkDqSqtSIjBnQkWNiDaYuegFOPRU2bTJbBrz3HpcNuo11FbFegyK7OVmFw+5BmN3nhIMZpsKSMjLnrLfNPhWWlCnbI0EJOog5++yzeeihhzjPqU+Gu5iYGJKSkhw/LVu2dDxXVFTE7NmzeeyxxzjzzDPp2bMn2dnZrFu3js8++wyAjRs3Mm/ePF566SX69u1L3759efHFF/n444/ZtGlTFT6miEj94JwRsYKD0449nMgIHH2E/Am2YBYg/c/vWDj7Rk5b+A4AH/U6GzZsgH/+M6CgyC4osQqHAY/MkHu2yDphNwLPrdk6fVeqqkZqYhYvXkzr1q059thjufbaa9m1a5fjudzcXMrKyhg0aJDjseTkZFJTU1m2bBkAy5cvJz4+nt5/n0kA0KdPH+Lj4x1j3JWWlrJnzx6XHxGR+sYuYMjNK3D0EQq5P/6A9HQYOhS2bWNvuyMZP/pRip7OgsTEgIt27YKSdgmxTD431WM3kd3nTO+TwprMQQzvnuwRsFnPrckcpMJhCUrIG0CeffbZXHjhhaSkpLBlyxbuvfdeTj/9dHJzc4mJiSE/P5+mTZuS6NZvo02bNuTn5wOQn59P69atPa7dunVrxxh3U6dOZfLkyaH+OCIiVRZoZ2brhNq0lEROnrbI46j+Kr3vFz8xrXwDp858wAxkmjSBjAyaP/AAM+PiHGPdM0PeuHemdv8cgbZAqNGATRqdkGdiLr74YoYOHUpqairDhw/n008/5YcffmDu3Lk+X2cYBhFOBWURNsVl7mOcTZo0iaKiIsfPtm3bqvdBRESqKdACXGt5KDevgO2FJcxdu8NrrYnFV1Htf+fkMHn2JE69b7wZwKSmwvLl8Nhj4BTAwMGMiRVAeSusDWYJy65g2f39tGwkoVDjW6zbtm1LSkoKP/74IwBJSUkcOHCAggLXKHzXrl20adPGMea3337zuNbvv//uGOMuJiaGFi1auPyIiNQl9y9sf7t5rPFDuyW7FPy6F8KCa4DkuO6yLfD887wz8xrO3PwNFVF/twzIzYWTTvI51y9/+L1a26j9FSxbqlLPI+JNjQcxu3fvZtu2bbRt2xaAtLQ0oqOjWbhwoWPMzp07Wb9+Pf369QOgb9++FBUVsXLlSseYFStWUFRU5BgjIlIf+ApM3L+wZ8zf5MhQ+HrdSR1aOk6ude5RZBcoWMs80T//RJf0kTBmDE3/2gd9+hC5ZjXcdx80bep1zlYwBFRrG7VdwbJdrYxIKAV9Yu++ffv46aefAOjZsyePP/44AwcOpGXLlrRs2ZL777+f888/n7Zt27J161buuusufvnlFzZu3Ejz5s0BGDNmDB9//DGvvPIKLVu2ZMKECezevZvc3FwiIyMBs7Zmx44dvPDCCwBcd911pKSk8JHVUdUPndgrIrUhmL4+PSYvoLCkjITYaOJiojxeZ3ctK9BIS0lk7todnr2QystZlXEvXV54nJjyA3DIITB1Ktx0E/z9v6e+5uxc6+KeHQmk/5LzWJ3qK6EQzPd30IW9//vf/xg4cKDj91tvvRWAK6+8kqysLNatW8drr71GYWEhbdu2ZeDAgbz99tuOAAbgiSeeICoqiosuuoiSkhLOOOMMXnnlFUcAA/DGG28wfvx4xy6mESNG+DybRkSkLrgXvPoyYXAnl7Hur3Mv8HUOCKxgwqUX0t8tA06wWgacdZbZMuCoowKes12hsSWQ/ksWX9cRqSnqnSQiUgXOmQegylkIuwyGe0bG+j0yAiafm0p6jzbwwANm08aKCkhMhCeegCuuIHvFLyHLiCi7InVBvZNERGqYcw1IdXoL2b3WvSDY+UyW9PJt0L27uWRUUcHnXfvz39fnw5VXQkRElebire5FRbhS3ymIERGpAudAozrbhu1e6x48pPdJ4esbe5H++nSzZcAPP0DbtkxMn8zoc27niXV7fV7PH7vAJ5i+SCJ1RctJIiJ1IKilmk8+ofjqa4n7bYf5+zXXwKOPkv19UUiWe3wtaVlFyFpSktqi5SQRkRAJJCNRlaxFQMs+Ti0D4n7bQV5CEuNHPwovvggJCQEt9wQyN7vr+DrrRaS+UBAjIuJDIMFGVepQfC77GAa8+SYcfzy88QY0acKGS6/lqltmc9I1Fwb8Hs6dpoMNQtzPevF3oq9IXQh57yQRkYYkkC3UwWyztnjdkvzrrzBmDHz8sfl7164wezadTzyRRUHOPZgt0v7maS0v+euxJFKblIkREbFhLcMAjqUWu6WZkG1DrqyE55+Hzp3NACY62txG/b//wYknep2fr8yIy66magYe6nkk9ZEKe0WkUbMLQrydVGt3om5ICmB/+AGuvRa+/BKAdUd2Zuu0pxh+6Zle51tcWk5hSZntSbo630XCmQp7RUQC4K1mxNsyjF02oloFsOXl8Mgj0K2bGcDExfHEsJs49+KpTMuz/59nf72OnMcEWwejbdUSbhTEiEij5S9YcV+GsdvFU+UC2NWrzc7SEydCaSkMGgTr13P43bfTtuWhLvOxa/w4YXAnrzuTrDHuc/EXpFTn0D6RuqDlJBFptGpi2cVvQ8iSErPW5dFHXVoGZB/bn6wlP9vOxd81nZtE5uYVOK7hvtTlawmqpu6HSLCC+f5WECMiEkLeAgoAvvrKPKjuhx8AyDt9KCn/mQ1t2rh0uF6TOcj/tZzez7k5pHMdj/X6P4tLKSmrJDa6CS3jYhSkSL1Wo12sRUTCRW1nFpzfz3lpJr1zIkyaBM89B8AfzQ/jrjNv4LuTTufrNm28Xs+5/sVb8W5xabkjgOmSHM93O4pIS0kEDm6P7jF5ASVllcRERdpnh0TClGpiRKTBCqTGI5TFrM7vZ9WlPBSdB126OAIYrr2Wz99dxHcnne5S92LV1EwY3MnxmK9tzdZ7Ff2dvZl8biq7iw9QYUBuXoHLWLtrizQEWk4SkQYrkEyM3xqWKrxfWkoim7/bwjPfvEaHBXPMJ48+2mwXcHpoMiF228CdPy/g8tmzc/KYMX8TYAY1Wk6S+kpbrEVEsN9N5J55SUtJJDICxxKMnUCzNel9Uvj6zoEkznmX1x6/ygxgmjSBCRNg3bqQBTDWe00+N9UlU+P8ed2zUFmLN1NYUkZhSZl2H0mDoSBGRBoV68s9c856snPyyM0rsF2CsXuN3y//bdtg+HAmv/0wh5XsoaDjcZCTY+5EOuSQKs/ZWxDlqwGk+1LUmAEdSYiNJiE2WqfuSoOh5SQRaVTcl2Gc+x55W2LxuyxVWQkvvAB33gl790LTpnDvvXDHHdC0abULjEO55CVS32l3koiIF1YQ4RxU+Ass7MZYgckdR0dw7jOZ5vZpgL594aWXzB5If3PZqRRkEJOdk0dxaXnAGRSd9SKNiZaTRKTeC/Vx+L6WYQKdz4PvrWHEvNcYcvlgM4CJi4OZM82/d+5se8puVZZxrFqWuJiogOarU3elMVEQIyL1Xqi2SocqGPrsP/N497XbuHPJq8SUl8HgwfDddzBuHERGeszZPWgKZh7BBkDqNi2NiYIYEan3AvliDiTQmTF/E9sLSxxbjQPhEnCUlLD+iht56ZkbSf1tM8VxLeDVV+HTT8neiUtg4j5n5+s4z3X8m6vpOGku499cbfu+QFBZo+pmmUTCiYIYEan3AvlirqkMhBVwLHv5fejRg9TXs4gyKvn4uFMZPmYWJ+84guwVv3gEUe5ztjsIb8yAjsxdu4MKA+au3WH7vloWEvFOQYyINAhW0AAHMyLuyzZVObl2/ImteXzxLJ6bdQv88AN/tWpDxiWZ3HPJPfx5aKJtYOLOvTjXOcAZ2i2ZyAgY2i3Z5TX+rhfKGiGRcKUt1iLSIDj3ErI6NQOOrcm+tlJ73dEzdy7ccAP8+qv5+7XXwvTpkJDg+3VurC3SkREw+dzUai/1aMu1NGTqYo2CGJGGxi5gGP/mauau3cHQbsnk5hWwvbCECCA+NtqRbXFvyGj3xW8FBQmx0cTFRJHRPYELX58Bb75pDujY0WwZMHBglefu3iKgOvfAV1drkXCntgMi0uDY1Yg415OMGdCRyAgwwLEd2XnZxtfyjPUchkHask854/yBZgBjtQxYu7bKAQy4tghIS0kMaCnIbsnIuge5eQUq3hVBQYyIhAnr2Pzi0nLHF7tzPYldLyFnViCTtXiz/fH9lx/DxwunM/OjGbQs2cOPSUfDihVVahlgF4BYAZWVMbLm4S2gsQvatH1axJWWk0QkbFS3FsT29W4tAyqim/LSwHQOvXcSl5/yj2rN01qecl72cV4W87XEpZN3pbFSTQwKYkTqq+p8OQf62uycPMdZMKcde7ijfgRc2w2waZNZrPt3y4C1KV3YOu0pRlxyRrU+l/U+zkXGdkGXAhURTwpiUBAjUl+FeqeOr/cAiIzAs6C2rAweewzuvx9KSymLPYSHTxnFqz2HkpwYV6WAwy7LoyBFJHgq7BWRessqwK0wqNZBbr7qSaz6mYTYaIZ2S3atI1m1Ck46CSZNgtJSGDKEi8e9xCsnDKdJkyZeC2/9HT5nV6/iXoej811EQktBjIjUKqsA171I15Kdk0ePyQvoMXmBzy/7QE+0PalDS3MnT/fWMHEilSedBGvWUHxoPA9cOJHs+7I475/9aJcQy+RzU10Kb535K6r1dqqwc6sDncIrEloKYkSk1qX3SSEuJorCkjKPL3Sra7Pdc3AwA5OWkugIKtwzHB7X+PJL6N4dHnmEJhUVfHTcqQy86hn+ffQpZC35OaCt2HZBir/MSnZOHkUlZY7ftbtIJLQUxIhIjfG35GP3he68FGT3ZW93Vop7hsO6RruIA7y88t/Qvz/8+CMkJ7N4+otMu/J++vTtEnCw4o2/zErW4s0YmHU5EwZ3UnNGkRBTYa+I1JiaOB7frljWtoD2449hzJiDLQOuu85sGRAfH/B1g52Lv99FxD/tTkJBjEh94O1L3FsgYrct2u7L32dw8PvvcPPNri0DXnoJBgzwOddQBFzqaSRSfdqdJCJ1zlegYbcM41zHMnftDr/LNB7PGwa88QYcf/zBlgG33262DPASwDgvdwVSr+KvBkY1LyK1S0GMiISEXXGtt0DE7sve57Zof6/ftg2GDYP0dNi9G7p1M1sGTJ/us2WA8xx91atYO6bu/WC9z+BKNS8itUvLSSISNLssi/tSSqjqQXxep7ISnn/ebBmwbx80bQr33Qd33AHR0dW7thP3w/N8HdKnOhiR6gnm+zuqluYkIg2IewYjOyeP4tJylx1FVhfpUL+Xw6ZNcM01sHQpALu6ppFx5k2cc8bppAcQwAQyx/Fvrmbu2h10SY6nuLQcOLjLKOj5ikjIaTlJRILmvpxj1bPExUSF/IvbY+morAymTjXPfVm6FA49FJ5+mvMumcaypq1DepDc3LU7qDDgux1FrMkcxJrMQX4/n+piRGqPMjEiEjT3DIZ1tL7dF3dIl1dWrYLRo2HNGvP3IUPM5aSUFG5wa8BYXdk5eTSNasL+skqGdksO+HWhykCJiH+qiRGRGlXdbccnT1vEH78Xcu//3iH96/9CRQW0bAlPPQWXXw4RETUwa22XFqkr2mItItUSykaF1V1eyWzxOwtfHU/6l2+bAczFF8PGjeZOpBoKYMB13u73Q40cReoHZWJExENtZyGsJae0lMSDh9x1TjR3HT3/vDkoORmysmDEiGq9h69lLW9jnO/HmAEdyZyzngoDZWlEaoAyMSJSLcFkTwJpgujtees5q9Ozdcjd2qzXoXPngwHM9dfDhg22AUygWZFAOkhbY+79YL1LF23n+5G1eDMVhrnVWsW7InVLmRgRqRIra1FcWk5hSZnXrISvrI71XEJsNHExUfRPMBiY9TBnrf0CgD1HHMVdZ4+jz9Xne82eBJI1cm5p4GuLdHZOniPLAvaZFp0DI1KzdE6MiNQ4K2sRAV47ToPvnUuO5/ofTfrPX5s9j3bvNlsGTJjAuYcOYEtxJat9nLni6/rOc7UCLV+Bh/WcFfDYXVO7j0TqD2ViRKRKnLMW1aoN+eUXuOEG+PRTAP485ngmDB7P6ZefDVDzp/6KSL2iTIyIBKQ6X+7W+GDPZnG852kdOPa9bFKfnsohB0ogJgbuu4+RRi9+2VvGpsWb1YdIRHxSYa9II+NcCGsV1FrLJ9Zz499cXWNbiLMWbyZm8490vXwEJz12H4ccKOHblFTzALu77uK6MzqF9MRbK2Pkr6hXRMKPghiRRsTfF7pV52LtEvL3pW+348fnbqGyMp7ZOo9PXxlH963rKTskjsdGjGPdfz6E444DQt8JWruJRBouBTEijYRzDYv1hT5hsJn1mDC4E3BwK/HQbskBZUPstmJ73cqcmwsnnkjPFx4lprwMzj6b6I0buG3OTNL7dbCdbyiyQdYcnTtPZ+fk0WPyApdt1CISflTYK9JIWFuRIyNg8rmpQGiKZt151NmUlMD998Njj5kn7h52GDz5pNeWAYFu3fb6fgGw7gXowDqR+kaH3YmIB/eMRNBLQT44v85lOWjJEujWDaZPNwOYSy4xD637u2WA3ftZ8wJss0Hur7HGZ85ZH/C8xwzoSEJstM+t4SJS/ykTI9JIOWcwgKCyH+48DpwrKjJbBrzwgjmgXTvIyiL78G4uWRO7g+p8ZVbstnWHbKu3iNQLysSINHKBZFScMyb+sh/+pKUkEhlh/slHH0GXLgcDmOuv5+1XPqXHqhju/cC1qNiupsZbYa9dTY81fvK5qR7XUZNGkYZP58SINEDOS0XpfVL81o04n3pblfqY3LwCEvYVMmLaDFi72HzwH/+Al16C/v2ZOW0RhSVlgGcAEsj7uQcwVk3PydMWOebsfh33eyAiDY8yMSINkHuGw1/zQ1/bmv1mNAyD6fvXsmj2GM5cuxgiI/ku/XoGXjGT7JijHPOxalCcdwkFynmbtBXA+Dv7JZgmliISnlQTI9IIuDdABM+dSd6yNT4bLLq1DKB7d5g9m5MXFvltyug8N7v3tR5PS0nkyx9+d8zduZbGCmrsXqcWAyLhSTUxIo2EXZbE7rH0PinExURRWFJG1uLNtpkZb9ka24xGZSU8+6xZ+/Lpp2bLgClT4JtvIC3N9jXu87J+t04Ndn9f54P3CkvKiIuJcgQldme/WNfU6bwijUfQQcyXX37J8OHDSU5OJiIigg8++MDlecMwuP/++0lOTiY2NpYBAwbw3XffuYwpLS1l3LhxtGrViri4OEaMGMGvv/7qMqagoIBRo0YRHx9PfHw8o0aNorCwMOgPKNKQVTUYsQsyvC2/OC81Zefkcemtr7CrZ28YOxb27YOTT4Y1a8geeBknP/aVY5u1VWfjvhXampd7MXFaSqJLkOPr4D1vy186nVekcQk6iCkuLqZ79+4888wzts9Pnz6dxx9/nGeeeYZvvvmGpKQkzjrrLPbu3esYk5GRwfvvv89bb73F0qVL2bdvH8OGDaOiosIx5rLLLmPNmjXMmzePefPmsWbNGkaNGlWFjyjScAUTjAAUl5Y7lpXcgwC/x/2XlVGc+QCvzLyW1mv/x/5mhzBjxHiyp78Oxx3nNUjxthPJ+n3C4E58PfF0cvMKXMZb85l5ac+A2xB4y9CISMNUrZqYiIgI3n//fUaOHAmYWZjk5GQyMjK48847ATPr0qZNGx555BGuv/56ioqKOPzww3n99de5+OKLAdixYwft27fnk08+YfDgwWzcuJHOnTuTk5ND7969AcjJyaFv3758//33dOrUye/cVBMj4sr5lFq7WhKfcnNh9Gj49lsAvjg6jXsH38SvLVq7nNdi1bDk5hU4/gy0NiWYWhbVvYg0XHVWE7Nlyxby8/MZNGiQ47GYmBj69+/PsmXLAMjNzaWsrMxlTHJyMqmpqY4xy5cvJz4+3hHAAPTp04f4+HjHGHelpaXs2bPH5UekoQjFSbrWDqEIoMIgsBNu//oL7rgDTjrJDGAOO4yl9z/JPdc8wgmn9nDJrFhLSFbzyNy8gqAaOQbT+NHfbisRaRxCGsTk5+cD0KZNG5fH27Rp43guPz+fpk2bkpiY6HNM69atPa7funVrxxh3U6dOddTPxMfH0759+2p/HpH6wip+tZaCAuV+VsqazEE8ODKVyAgzkPEZBCxebO42evRRqKxky1kjGHrDLLYOHsnXk86wXeaZMX8TFQZEgM+iXnfBBmnaPi0iUEO7kyLcmroZhuHxmDv3MXbjfV1n0qRJFBUVOX62bdtWhZmLhCdvO3/SUhJti2LtTrh1KCqC66+HgQPhp5/Y1aIVX0x/ifTTb+a78piAsh/xsdEuwY2/zEmwmZVgsjYi0nCFNIhJSkoC8MiW7Nq1y5GdSUpK4sCBAxQUFPgc89tvv3lc//fff/fI8lhiYmJo0aKFy49IOPGVjZgwuJOjCNaOt6Jab0s6XoOADz+Ezp1h1iwA3u89nDOufpardyfxZ3Gp34aJ3uZpZU7cdyC5P++v2aOIiLOQBjEdOnQgKSmJhQsXOh47cOAAS5YsoV+/fgCkpaURHR3tMmbnzp2sX7/eMaZv374UFRWxcuVKx5gVK1ZQVFTkGCPS0PjKRvjLPHjb+RPwcsuuXWaH6XPPhR074JhjYPFiip98mr+axWEAJWWVLme12PE2T+tx9x1I/l6n2hcR8SXo3kn79u3jp59+cvy+ZcsW1qxZQ8uWLTnyyCPJyMhgypQpHHPMMRxzzDFMmTKFQw45hMsuuwyA+Ph4Ro8ezW233cZhhx1Gy5YtmTBhAl27duXMM88E4Pjjj2fIkCFce+21vPB3E7nrrruOYcOGBbQzSSQcpaUkkl9UYjZRDJJ776BAexJhGJCdDRkZ8OefEBkJEyZAZibExpL+9zCrFqe6NSjOPZpqYryINDJGkL744gsD8Pi58sorDcMwjMrKSiMzM9NISkoyYmJijNNOO81Yt26dyzVKSkqMsWPHGi1btjRiY2ONYcOGGb/88ovLmN27dxuXX3650bx5c6N58+bG5ZdfbhQUFAQ8z6KiIgMwioqKgv2IIiH3+vKtRr+pnxuvL9/qdUy/qZ8bKXd+bPSb+nntTGrrVsMYMsQwzFDGMHr0MIzcXMfTgczZm2BeW533EZGGJ5jvb/VOEqkFPvsP/c357BPA9u8hOT+lshKeew4mToTiYrNlQGammYGJjg5qztX5vKF4HxFpeNQ7SaSeCaRGxbkuxLkWJJi6EL9jv/8eTjsNxo0zA5hTTjHPf5k0ySWACXTO3gTzWm2XFpGqUiZGpI74ypp4y8r4y8SMf3M1c9fuYGi3ZGZe2vPgE2VlMH06PPAAHDgAhx4KjzxidqBuov8vIyL1RzDf30EX9opIcLwFK+4H0TmzK9T1dS1Lbl4BFYb5pzX+i+xPmDF/Jok/fW8OOuccyMqCI48M6JrunyOYdgJVDcZERAKh/wsmUsMC6Spd3WvZXvOvv4i48w5mPTfWDGAOOwzeeAM+/tgRwPi6pvsZLdY4q62Av+Wt7Jw8Muesr9KymIhIIBTEiNQwb8FKVU6d9Rf4OK65fwt068blX75DpFHJlkHnwsaNcNll4HbqtbdreutCPbRbckDBV9bizVQYZrPJMQM6qvZFREJONTEitSA7J89x1sqEwZ1qbjmlqMhs2Pj3ibu0awfPPw/DhgV9KbtlJnWaFpGapt1JIvVM1uLNFJaUUVhS5ghmvB2p7+uo/eycPHpMXkCPyQs8n3drGcCYMbBhA9mtugZ0dL/7+1pdqbMWb/ZYUnJeEvI2X/U3EpGapiBGpJrGv7majpPmMv7N1V7HjBnQEffWpd5qRHzVqGTOWe8IhhzP//YbXHyxa8uAJUvMs2BatAi4FsVunLclJeceSKp1EZG6oiBGpJrmrt1BhQEffbvDa8YjvU8KD45MdWmO6K1GxFeNSoUBEWA2Yux/NLz+upl9eecdyiOaMPuUi3lz1kdkN01xzCXQWhS7ce6P2fVAUq2LiNQV1cSIVNP4N1fz0bc7sP5DqqmTZ11qTNoC118P8+cD8H1SR24bPI7vkv5Bu4RYgBo9BVf1LiJSU1QTI1KLZl7ak+S/AwdrJw74r20JpE7FWXqfFL6+YwDp33wIXbrA/PmURkXzSP8rSb92Jts7HG9maILcCVTluajeRUTqmIIYkRCwgobJ56YCZj+gGfM3ea0Vca8jCSiQ2LgRTj0Vxo83Wwaceirzs+fx4ZAryDinC2syB7Emc5DjoLy0lEQy56z3WatjNxd/qhL0iIjUBAUxItVgfaEDHn2PAK/ZEPdMic9AoqwMHnqIiu49YNkyDhxyqFm0u3gxIy4+3WMHkSWQWh27ufijQl4RqS9UEyNSDVYH5oTYaOJioqp8vL57jYn1+91tijnnyXtg7VoAPu94Is9ccCvvT7vEYw7u9S9WH6WmUZGUlFUEXB9jNxfnM26q8vlERAIVzPe3ghiRagg2UAi0IPb0Bz7h4rmzueabD4g0KqFVK5aOvZc7m3ZhzMB/uLzW3zWDPWjPPSiyfoeaK1oWEbGoAaRINQUabFgNF2OimtAyrqnHkox7AOGr6aPDF18wZ9aNNN/+9/LPZZfBk09yyuGH87XNcPdmkXbPB/S+f0tLSSS/qIS0lETAXG6yPoO2UYtIfaKaGBEbgdZ9WPUkEwZ3st2t43xSr/OZKs6HxTkUFsJ118Hpp5sBzBFHmM0a33gDDj/c5brBFtcGU/fi3gk7vU+KS9GwiEh9oeUkERuhOgfF21KORx3LnDlw443mibvAe71HUPbww1x8RqrtNTPnrKfCqJnlHZ0BIyJ1SctJItXkb4nGH+dAYE3mII/nrR1FAxIq+bzbQM5Yt9h84thjuXHAGD5JPIZ23+zi4jM8r+3eHToUc3T+rNX97CIitUXLSSJ+VOVcFH/LUem9j+Tr5F+589bzOGPdYsqbNIFJk+Dbb+l31T99Lv04n0lTnWDDeY7WZxz/5mqdASMiYUPLSSJ+eNvC7IvPJZm8PJeWAZuS/8FPU55k6JVDQz31gOdoBTSREdTYMpWISCC0nCQSQtaXfDBLN7ZLMhUV5iF1kyZBcTEVTZvywulXEH/3nVx+yj9sr1OT9SnW9bIWb3bsREpLSSQ3r0C7kEQkLCgTI1JFQQUYGzfC6NGwfLn5+2mncUmvq8mJbuVyUJ77deyyQKEMbKqSZRIRqUlqACliIxQ9f7Jz8ugxeQE9Ji/w2RvJ4cABeOgh6NHDDGCaN4esLPjiC4ZdOMCl47TddcYM6EhCbDTFpeWOeYfy2P9gWw6IiNQnCmKkwfDXNTpzznqvX/7eXuv+uPO5L4DHmS8u47/5Bnr1gnvvNYOZoUPhu+/ghhugSRNHJ+gJgzs5Agm7eezdf/CcGcD3WTN+7oM7daMWkXCmIEYaDF8ZCn/bku126ljLNs7XtDIjCbHRjgPucvMKHGOyFm9m9+8FNLnjdujTB9atg1at4D//gY8+gvbtXd7XfWnI/f1mzN9EhQERHJy3FXg4v2+g90FEpCFRECMNhq+lEX/bkp1f6xwEuF/T7vRa5zH3N/+Nz18Zx2Vf/R9UVrJl8EjOuWEW2R36QUSEx/vaBUl2nyE+Ntpj3t7GaolIRBoL7U6SBsPXIW3OzzlnP+BgR2bnwlbn7Ii3azpf5+sbToDbb4eXXjKfPOIIeOEF0tc289mzyH3nk/v7Wf2WAglIXOajIl0RaQS0O0kaFLudO+6POe/IAaq8O8e6ziXbc5n2+fOwc6f5xI03wtSp0KKFx3sHs7PI31jr/RNiowEoKinDQGe8iEh40zkx0uhYX/jFpeWOIljnc1Ccl2yKS8tJiI32yMQE65ZuLUic+ABnrFtiPnDssWYm5tRTHWPcMyvBdJP2N9bK4lifGarfikBEJJyoJkbCiredN9YXPuBRD+Je71JYUkZcTJQjwAh6d45hwKuvckH6IDOAiYx0tAxwDmDs2G2Z9jXWV22L8+4mq9i4uq0IRETCiZaTJKx4O5wt0GUaf+P8Lv9s3cqOS64gecVX5gt69oR//9s8BybA99EBcyIi3umwO2mwvGUn/GVUrAyOdQ1rK7U796Un6/cXFv0AM2dS1rkLySu+Yn9UU54bcg2sXOkRwNhdJ5DPICIiwVEQI2GlqoezOQcVwQQYYwZ05OTS33jvzYlw881El/zFivapDL36aVpk3gNR9mVlvgIV989QlZOEQ3H6sIhIuNNykjQ4/nYoAYHtEDpwAB55xGwbcOAANG/OijETuS3+JG44/ZiQ1Z5UZYlMS1Ii0lBpOUkaNfdMi3swEFA2x2oZcN99ZgAzbBjvZS/g1sQ+IQ1gwDVr4+u0YG+vERFprJSJkXojVN2ZvZ0L46tbtMNff5mByxNPQGWl2TLg6afh4ovp8cBCCkvKSIiNZk3moCrPzxfnDIvzQXjacSQijYUyMRJ2/DVo9PU6q6u0VR/inmmxshaAR4bGpa5k0SLo2hUeewwqK/l5yD9h40a45BLblgHBfr5AalicMyxqzigi4puCGKkX/DVotDgHA1bgY3WV9tad2spmOHeLtt5ze2EJr3/6LVx7LZxxBvz8M/nxrfnXBZmc1+cGTn5prSPwsF4/YXCnKn2+QAI0BS4iIoFTECP1grcGje4ZDPddRlaHZ+cTeJ25n3rrnqG5ZHsu7z937cGeRzfdxOJ3F7EmtR9FJWUugYfz64PdHaQaFhGR0FNNjNRrPSYvcKlDCXaXkdc6m/x8GDcO/vtf8/dOncxA5pRTgIO1KZER2J6C6z6v6rLmmZaSSG5egepgRKTRUu8kqVdCVbALnr2I/F3Powu1YcBrr8Ett0BBAeVNmrBx1Bi6Pj8DmjVzDKvtolorY5RfVEKFQUC9lUREGjstJ0mNs76g7/lgPePfXB3Ua53rUKp9wNvWrTBkCPzrX1BQwPfJxzDiiicZ1WEEJz+5zOW6vmpTrHEJsdFVqo+x+xzWctPQbsladhIRCZCWk6TGZefkcc8H6wGzcHfz1KFVuk6VD3irqIBnnoG774biYmjWjFWjM7i25WlUREYCUFhSFvB1q3vQnA6qExHxTluspV5J75PCiO7JREbA0G7JPsfaZSmsbdR/Fpd6LeD1asMGs84lI8MMYPr3h7VrGXfEWew+UElcTJTHriV//BXp+ssYqchXRCQ0lImResXuYDprOQoI/Gj+Awdg2jR4+GHz7y1awPTp5lbqJk1qrJDW2vZt7ZqK/3vJSfUtIiKBUSZGap3doXNV4X4wXeac9aSlJJIQG22bhbECnMw56w++78qVkJYGmZmOlgF89x1cfz00Mf+Vt2pecvMKgj5gzxdr2zeAAV7PrxERkepTECNVNv7N1XScNJfxb64ma/Fmn4fO+WK3/HLasYcTGQEVBnz5w++OZR/3jMaYAR0d415esB5uuw369oX16+Hww+HNN+HDD+GII2zfO9RLO9b1RnRP9hp4iYhIaGg5Saqs46S5jlN2J5+byoz5mwCCXj5xLnQFPHoHFZeW+yy8zc7JY8Xs/zLl05k03/6L+WB6utn/qFWrKn++UG4NFxGRwGg5SWrF0G4Hi3XT+6SwJnMQEwZ3Ysb8TT6XldwzL87ZELveQT4LbwsLSX/pQZ5+aYIZwLRvD598Aq+/Xq0ABrwsVflQ7S3gIiISFGViJCj+shNWVgXw2jU6ZFuM338fbroJdu40fx87FqZMgebNq35NJ85FuoHMVVunRUSqT5kYqTH+GhmOGdDRUQtSWl7B9sISxzKT85hq1aHk58OFF8J555kBTKdO8NVX8PTT1Qpg3DMp6X1SmHxuasBz1dZpEZHapUyMBCWYOpGq9hfy+h6GAa++CrfeCgUFEBUFd94J99zj0jKgqvP1lklRbYyISO1RJkaqrSr1He6vcW4ZEAzbbM/WrTB4MFx1lRnAnHACfPMNPPSQ1wDG67W88JZJCeYaIiJSexTEiC1vX9y+vtDdn/PVf8gXK5hIS0nk1CkL+eaWTOjSBRYuNAOW6dNhxQro0SOoa9mdBOy+fGQ3X2uJrLi0XEW7IiL1iIIY8ZCdk0dxabntGSe+6j5CVRNiBRO7V67mqWfHceKTD8BffzlaBnD77eZSUhDXsjvUzjno8pV5Su+TQlxMlA6uExGpZxTEiAfr4Lq4mCiPrIR7tsL5y7+qmRcPBw7AAw/w2jM3cMKOTRyIaw4vvACLFsExx/gMOLw9ZxdgOT/mb8koLSWRyAjzTxERqR8UxIiHYDIqIa8XcWoZEFleBsOH03TTRrjuOkfLgECWtB6eu8FxmjAcDL4Aj6AL8Jp5suTmFVBhmH+KiEj9oCBGPASTUQnZtuLiYnPX0d8tAwriEvjqwadhzhxo1y7g97Se219WSYUBc9fucHneLgCyMk+l5RVkzlnvCHxq5HOKiEjIaIu1BKVGtht//rnZXXrLFgA+7XkWk069iri2bap0aFx2Th4Pz93A/rJKhndPZualPX3O33psR2EJ1n8MD41M1XZqEZE6oC3WEhJ29SUhXT4qKIDRo+HMM2HLFvYltYNPP2X3cy8S17ZNlbMeM+ZvoqSskvjYaJcABuyzTNZjw7snOx5TAa+ISP2nIEaAwAOW6i6rWO+zZNoL0Lkz/PvfVEZE8MoJw+h36RNkJxwf0HJWIOfYlJZXBHXWzcxLe/LQyMBP6BURkboV8iDm/vvvJyIiwuUnKSnJ8bxhGNx///0kJycTGxvLgAED+O6771yuUVpayrhx42jVqhVxcXGMGDGCX3/9NdRTFSeBBixV2YHkHHC8/dE33P3yvfSfdIPZPuC441iY9X88OOgG9jQ9JOAMiK+MkHXIXkxUpNcx3oKgkO2wEhGRGlcjmZguXbqwc+dOx8+6descz02fPp3HH3+cZ555hm+++YakpCTOOuss9u7d6xiTkZHB+++/z1tvvcXSpUvZt28fw4YNo6KioiamK4QuYLGTtXgz2wv+Iu+xZ3n7yas554dlVERGwd13w+rVDL7+/KB6FHmbrxWYAH67X+sUXhGRBsAIsczMTKN79+62z1VWVhpJSUnGtGnTHI/t37/fiI+PN55//nnDMAyjsLDQiI6ONt566y3HmO3btxtNmjQx5s2bF/A8ioqKDMAoKiqq2gdpgF5fvtXoN/Vz4/XlW2vsmnbv8d67Xxkr/pFmGGb3I+PbpH8YV4yfFbI5WPpN/dxIufNjo9/Uz4Oet4iI1A/BfH/XSCbmxx9/JDk5mQ4dOnDJJZfw888/A7Blyxby8/MZNOhgM8CYmBj69+/PsmXLAMjNzaWsrMxlTHJyMqmpqY4xdkpLS9mzZ4/Lj7iqieyD+zVdfq+o4H8Z9zHkkrM46adcaNaM3LF3MXbsc5x16aAqHVpnxxqblpLoknnxdwqvlo1ERMJbyIOY3r1789prrzF//nxefPFF8vPz6devH7t37yY/Px+ANm3auLymTZs2jufy8/Np2rQpiYmJXsfYmTp1KvHx8Y6f9u3bh/iThb/qFOUGehKu9fvEIyvg5JPp9dSDxJbtZ9XR3WHdOtKefpgv7z6L9D4pQfVh8sUam5tX4BKYaMlIRKRhC3kQc/bZZ3P++efTtWtXzjzzTObOnQvAq6++6hgTERHh8hrDMDwec+dvzKRJkygqKnL8bNu2rRqfomEKNPvgHrBk5+SROWe9S5+hHpMX0GPyAgCXa6af0JbnNn/EkCvOgRUrOBDXnGn/vJUNr78P//iHy/uEqg+Tt7E6oE5EpGELrIteNcTFxdG1a1d+/PFHRo4cCZjZlrZt2zrG7Nq1y5GdSUpK4sCBAxQUFLhkY3bt2kW/fv28vk9MTAwxMTE18yHCUHUOpXPPYGTOWU+FAZEROPoMFZaUOcY6rr9iBVxzDd3Xrwfgq+P7cerCd5joduKuJb1Pite5OWdTnOdlBSQz5m8CzJ1I3q7j6/oiIhL+avycmNLSUjZu3Ejbtm3p0KEDSUlJLFy40PH8gQMHWLJkiSNASUtLIzo62mXMzp07Wb9+vc8gRlz5W0rxVS/inMGYMX8TFQZEAJPPNU+xHTOgIwmx0Qd7Dbm1DNifeBj3XnovebPf8GgZUNXP4P73wpIyCkvKyJyzPuBzYEREpGEJeSZmwoQJDB8+nCOPPJJdu3bx0EMPsWfPHq688koiIiLIyMhgypQpHHPMMRxzzDFMmTKFQw45hMsuuwyA+Ph4Ro8ezW233cZhhx1Gy5YtmTBhgmN5SgJjZUy8LaU4BwV2naqtx6yMR3xs9MElI+cMx2efQdeBjpYBXHEFzR5/nAcPO8zn/ALJFLl/BvdMTFFJGRUGtp9BREQavpAHMb/++iuXXnopf/zxB4cffjh9+vQhJyeHlBTzS+aOO+6gpKSEG2+8kYKCAnr37s2CBQto3ry54xpPPPEEUVFRXHTRRZSUlHDGGWfwyiuvEBkZGerphpVAvvidx9j1HbKeT0sxl+rcz1lxv/6EwZ1sg6F3Fqwl9u47Gf6/eeYDRx4JL7wAQ4YE9Fl8BVEW9+Ug9787z1dERBofNYAMIydPW8T2whLaJcR6bYzob4yv5/291goapvAjXabcRau9f1IZEUGTsWPh4YfBKRD1JTsnz6OmpbpqpDGliIjUOjWAbKAC2W2TlpJIZASOTEsw1/B3/Xc+XMk9f7cMaLX3T7YefiQLnv8vzJwZcAADOGpa4mKiXAKOYM6GsbumtlOLiDQuysQ0MIFka3yxzWgYBrzyCqU3ZxCzdw+VkVE0mTTRbBvQrFm13gMO1rpYgYivuXvLuCgTIyLSMCgT00BYmYnxb64OOEMR6Nko3q7tkdH4+WcYNAiuvpqYvXugVy+arMqFBx8MKICxy65Y59UALufPBDJ3bxkXncArItL4KIipx6wv7LlrdwS0VBJMNsLbta1A4sZTj+J/N99LyXFdzB1IzZrBo4/C8uXQrVvQn8HbqbzO588EEojoADsREbEoiKkH/B3pP7RbckBf3MHUhdhd2wqCJrYv5/LbLqPXzIdcWgYwYQJEBbehLZAaHOv8GX+0ZCQiIs5UE1MPVLeOxVLdL/n+D81n5LzXGJvzDtEV5RyIa87jg67liNvHkd73qBqfi7/XhOo+iYhI/aWamDATqsaMvpZj/O78WbGCOS+P55av/0N0RTmcey5NN21k4nuPVSmAca518Tdvi79MkpaSRETEmTIxYcIuS2EFCxUGLtkJu7FesxjFxXDPPfDUU+YupNat4Zln4IILwE9TTm+s94qMMFsVAI4D9nLzCrzuRNJykYiIKBPTANllKdwLY32Ntc1ifPYZpKbCk0+aAcwVV8CGDXDhhR4BTDBnuFi9lZo3i3aZz0ffmkXEM+Zvsp2PdhiJiEgwFMTUguoc4maxAoPi0nLHdbwVxtodeOcSIBQUwNVXw1lnwdatZsuAefPg1VfBpudRIMtDztL7pBAXE0VhSZnL1ulm0U1cxihgERGR6lAQUwuqe5qstcwCOAID8B4I5OYVUGGYf3oEUO++C507w8svm9mW8ePhu+9g8GCf83fO+NgFZe6POWdarHnePbQz7RJimTC4U0gCOxERadxUE1ML3Gs9gq39sGpMEmKjiYuJsn2dv1NwD9/3Jy+ufIUe3ywyX3DccTB7NvTrF/T87eprgt05FMhnEhGRxieY728FMTXEV6DiXvjq78s7kKDHWxCRvXwr3z74BPcsmk18aTHlTSLZcOVNdMuaDjExIftswQZm1vji0nIKS8q0bVpERAAFMUDdBzG+MhPedhVVh20Q8fPPcP31ZgEvsLbtMdwxZDx7j+0csoChuh2ptSNJREScBfP9HdzxqxIwaynH7kwT68va2/NVkd4n5WAQUFFhdpa+5x746y/2R8cw45TLef+UC2h2SIzjPUMRQFgdqa2/B3sdl3mLiIgEQZmYMBJI0PHRGws4euLNdPn1e/OBgQP54Mb7efSnco/X+apLCTTAqW4mRkRExJmWkwi/IKZadS85ebz02UZmbp3H8a88S3RFOXubxdH86Sdh9Givh9b5qkvREf8iIlIXdNhdHXHfNhzMNmL3bdjWa8e/udpxDW/H7n/52kfMevJ6us1+iuiKcpZ0PpkF7yyCa67xeequtfV5wuBOXs+g0RH/IiJSXykTE0Lu2YtgshlWVsQ6mt/KjkRG4FIA7JKxST0M7rkHY+ZMIgyDksRWxM7KgvPPD7plgDIvIiJSHygTU0fcsxfOvweSlSkuLXcczQ9m4DK0W7LLNa2Mzf9efBu6doWnniLCMODKK4n98fugex5Z80pLSQxJE0oREZHaokxMLXHOdDjvXHJv0Aj4PD/mnQVrOeSuOxmWO898ICUFXnjB64m7/mptQpGBURZHRERCRZmYesg5K+OtQWNCbDQJsdHeD8B7910uumKQGcD83TLgrX9/wsmro22zIIH0PLLryeT8+kAyLKqfERGRuqBMTB0Y/+Zq5q7dwdBuycy8tKf/nUk7d8JNN8H775u/H3888255iAd3JzhqZ9y3STsfqOfvZGBvmRRlWEREpLYpE1PPWQ0av/zhd06etogZ8zfZ7kzKXr4V/v1vOP54eP99yptEsvaq8bB6NQ/uTnCpnQFcruHctNFfawNvtTvuGRbVvoiISH2iIKYG+Puyt4IDwCUQcS7ebbJ1C51GnW+e81JUxIYjOjHsyicZc+y5EBPjuMaEwZ0c26TtiooD6c3k3A3beanLvUt2dbtxi4iIhJKWk0IsmL5ItstIFRXk3no/XbIepVlZKcTGwkMP8UbvkTz31daQ9Bhy384d6Em96nMkIiI1TSf2UndBTLAdql2sX29mXlauBOB/HXvy67QnGXnBabbDqxpUOM8xlE0oRUREqks1MXUomGUch9JSyMyEE04wA5j4eKaedxsXnP8At+Xu9bosVZXlneycPP4sLgWgSUQECbHRAZ9jIyIiUp8oiKlrOTlm8PLAA1BWBiNHwoYNtL99HJFNIqgw8Ls9+s/iUnpMXhBwe4OSskoAyioN4mKiPGphREREwoGCmBDzFgx4ZDr27YOMDIx+/WDDBkpatoL/+z+y73iCk18zO1BPPjfV5/kr6X1SiIuJoqSsksKSsoACECvwiY1u4sjCWI/rrBcREQknqokJMbs6FY9i3xPK4brrIM8MaP4v9Uxm//Mm5j0wMuizWbJz8pgxfxMAEwZ3UsGtiIiEtWC+v6NqaU4NlnvQYv04s85sabl/L68tfQUm/dd84qij+DzjAZ4saeeSEbGuFwi79xMREWkMtJxUTYHUkozpfzSXb1vJ16+Po+Pc/5otA26+GdatY2dv151H7mezhIoKd0VEpKFREFNNaSmJREaYf9rasYP06bfw8H8eIPbPP6BzZ/j6a3jySTj0UNsgyF/AUZWARIW7IiLS0CiIqSIrkPjyh9+pMMxWAi4MA2bPNoOWDz6AqCi47z5YtQr69nUMszvy370NgbuAi4edqHBXREQaGtXEVJEVSCTERnv0F/rw3a946oss2uYuMwefeKIZ0HTt6nEd55oWq6jX/Zru0lISyS8q8cj+uLcM8PY+IiIiDYGCmCpyL8DNWryZiIoKCqZM59UFrxBbbrYMyL32NjLanMb1xS1ID+KavgIOq4Gke/bHfU5qEyAiIg2ZtliHwMnTFnHojxuZ/ulTdN/5IwCbupzIPeeM58e41hSWlDkyK6EIKgINToLdri0iIlLXtMW6NpWWkvXjHI5/5VmiKyvY2yyO5s88xdW7jmJ70X4SwCWA8bbcE4xAl4aC3a4tIiISThTEVMfy5TB6NN02bgRgSZdT+GPqY5w//CTGeMmWeAsqamLpR3UwIiLSkGk5qSr27YO774annzZ3IbVpA88+C+ef7zG0ppZ+VO8iIiINkbpY16QlSyA1FWbONAOYq66CDRtsAxgI/HwWb1ugvW2b1rkvIiLS2CmICVZlpdnz6KijeG7is3Rscz7j53s/dC7Q81m8ndTrLVjRuS8iItLYKYgJ1sCB8NZbsG4dj5FChQFz1+7wOtxbcBLoqbvuwYr1OqBG2hOIiIiECwUxVXHxxXDooQztlkxkBAztluzydCABipVhyZyz3uc49yBIy0giIiImBTHVMPPSnmyeOpSZl/Z0eTygppADOhIZARUGQQUkWkYSERExaYt1DQjkfBbnzEowAYm2TYuIiJi0xVpERETqDW2xFhERkQZPQUw9FejuJRERkcZKQUwtqEpAol1IIiIivimIqUFW8DJj/qagAxLtQhIREfFNu5NqkJVNSYiNDjog0S4kERER35SJCSH3ZSMrmzJhcCedrisiIhJiCmJCyL2Oxf20XRXrioiIhI6CmBDyV8diBTn3fLCe8W+uruXZiYiINCwKYkLIW7NHi3Nw46tppIiIiPinIKYWpfdJYUR3+6aRIiIiEhy1HQiB7Jw8Rw8kFe+KiIhUXTDf39piXQXZOXnMmL8JgAmDO7kU9CqIERERqR1aTqqCGfM3UVhSRmFJmSMDo4PpREREapcyMdUQAS5LSM5bq0VERKRm1ftMzHPPPUeHDh1o1qwZaWlpfPXVV3U9JSYM7kS7hFiGd08ma/FmR02Meh2JiIjUnnodxLz99ttkZGRw9913s3r1ak499VTOPvtsfvnllzqdl7WVOjevwBG4aElJRESkdtXr3Um9e/fmhBNOICsry/HY8ccfz8iRI5k6darP19bG7iTtShIREQmtBrE76cCBA+Tm5jJx4kSXxwcNGsSyZcs8xpeWllJaWur4fc+ePTU+RzVpFBERqTv1djnpjz/+oKKigjZt2rg83qZNG/Lz8z3GT506lfj4eMdP+/bta2uqIiIiUgfqbRBjiYiIcPndMAyPxwAmTZpEUVGR42fbtm21NUURERGpA/V2OalVq1ZERkZ6ZF127drlkZ0BiImJISYmpramJyIiInWs3mZimjZtSlpaGgsXLnR5fOHChfTr16+OZiUiIiL1Rb3NxADceuutjBo1il69etG3b19mzZrFL7/8wg033FDXUxMREZE6Vq+DmIsvvpjdu3fzwAMPsHPnTlJTU/nkk09ISdGOIBERkcauXp8TUx212cVaREREQiOY7+96WxMjIiIi4ouCGBEREQlLCmJEREQkLCmIERERkbCkIEZERETCkoIYERERCUv1+pyY6rB2jtdGN2sREREJDet7O5ATYBpsELN3714AdbMWEREJQ3v37iU+Pt7nmAZ72F1lZSU7duygefPmtl2vq2PPnj20b9+ebdu26SC9GqT7XDt0n2uP7nXt0H2uHTV1nw3DYO/evSQnJ9Okie+qlwabiWnSpAlHHHFEjb5HixYt9B9ILdB9rh26z7VH97p26D7Xjpq4z/4yMBYV9oqIiEhYUhAjIiIiYUlBTBXExMSQmZlJTExMXU+lQdN9rh26z7VH97p26D7XjvpwnxtsYa+IiIg0bMrEiIiISFhSECMiIiJhSUGMiIiIhCUFMSIiIhKWFMQE6bnnnqNDhw40a9aMtLQ0vvrqq7qeUliZOnUqJ554Is2bN6d169aMHDmSTZs2uYwxDIP777+f5ORkYmNjGTBgAN99953LmNLSUsaNG0erVq2Ii4tjxIgR/Prrr7X5UcLK1KlTiYiIICMjw/GY7nNobN++nfT0dA477DAOOeQQevToQW5uruN53efQKC8v55577qFDhw7ExsZy9NFH88ADD1BZWekYo3sdvC+//JLhw4eTnJxMREQEH3zwgcvzobqnBQUFjBo1ivj4eOLj4xk1ahSFhYXV/wCGBOytt94yoqOjjRdffNHYsGGDcfPNNxtxcXFGXl5eXU8tbAwePNh4+eWXjfXr1xtr1qwxhg4dahx55JHGvn37HGOmTZtmNG/e3Hj33XeNdevWGRdffLHRtm1bY8+ePY4xN9xwg9GuXTtj4cKFxqpVq4yBAwca3bt3N8rLy+viY9VrK1euNI466iijW7duxs033+x4XPe5+v78808jJSXF+Ne//mWsWLHC2LJli/HZZ58ZP/30k2OM7nNoPPTQQ8Zhhx1mfPzxx8aWLVuM//u//zMOPfRQ48knn3SM0b0O3ieffGLcfffdxrvvvmsAxvvvv+/yfKju6ZAhQ4zU1FRj2bJlxrJly4zU1FRj2LBh1Z6/gpggnHTSScYNN9zg8thxxx1nTJw4sY5mFP527dplAMaSJUsMwzCMyspKIykpyZg2bZpjzP79+434+Hjj+eefNwzDMAoLC43o6GjjrbfecozZvn270aRJE2PevHm1+wHqub179xrHHHOMsXDhQqN///6OIEb3OTTuvPNO45RTTvH6vO5z6AwdOtS4+uqrXR4777zzjPT0dMMwdK9DwT2ICdU93bBhgwEYOTk5jjHLly83AOP777+v1py1nBSgAwcOkJuby6BBg1weHzRoEMuWLaujWYW/oqIiAFq2bAnAli1byM/Pd7nPMTEx9O/f33Gfc3NzKSsrcxmTnJxMamqq/lm4uemmmxg6dChnnnmmy+O6z6Hx4Ycf0qtXLy688EJat25Nz549efHFFx3P6z6HzimnnMLnn3/ODz/8AMC3337L0qVLOeeccwDd65oQqnu6fPly4uPj6d27t2NMnz59iI+Pr/Z9b7ANIEPtjz/+oKKigjZt2rg83qZNG/Lz8+toVuHNMAxuvfVWTjnlFFJTUwEc99LuPufl5TnGNG3alMTERI8x+mdx0FtvvcWqVav45ptvPJ7TfQ6Nn3/+maysLG699VbuuusuVq5cyfjx44mJieGKK67QfQ6hO++8k6KiIo477jgiIyOpqKjg4Ycf5tJLLwX073RNCNU9zc/Pp3Xr1h7Xb926dbXvu4KYIEVERLj8bhiGx2MSmLFjx7J27VqWLl3q8VxV7rP+WRy0bds2br75ZhYsWECzZs28jtN9rp7Kykp69erFlClTAOjZsyffffcdWVlZXHHFFY5xus/V9/bbb5Odnc1//vMfunTpwpo1a8jIyCA5OZkrr7zSMU73OvRCcU/txofivms5KUCtWrUiMjLSI2rctWuXR5Qq/o0bN44PP/yQL774giOOOMLxeFJSEoDP+5yUlMSBAwcoKCjwOqaxy83NZdeuXaSlpREVFUVUVBRLlixh5syZREVFOe6T7nP1tG3bls6dO7s8dvzxx/PLL78A+vc5lG6//XYmTpzIJZdcQteuXRk1ahS33HILU6dOBXSva0Ko7mlSUhK//fabx/V///33at93BTEBatq0KWlpaSxcuNDl8YULF9KvX786mlX4MQyDsWPH8t5777Fo0SI6dOjg8nyHDh1ISkpyuc8HDhxgyZIljvuclpZGdHS0y5idO3eyfv16/bP42xlnnMG6detYs2aN46dXr15cfvnlrFmzhqOPPlr3OQROPvlkjyMCfvjhB1JSUgD9+xxKf/31F02auH5lRUZGOrZY616HXqjuad++fSkqKmLlypWOMStWrKCoqKj6971aZcGNjLXFevbs2caGDRuMjIwMIy4uzti6dWtdTy1sjBkzxoiPjzcWL15s7Ny50/Hz119/OcZMmzbNiI+PN9577z1j3bp1xqWXXmq7pe+II44wPvvsM2PVqlXG6aef3qi3SQbCeXeSYeg+h8LKlSuNqKgo4+GHHzZ+/PFH44033jAOOeQQIzs72zFG9zk0rrzySqNdu3aOLdbvvfee0apVK+OOO+5wjNG9Dt7evXuN1atXG6tXrzYA4/HHHzdWr17tODokVPd0yJAhRrdu3Yzly5cby5cvN7p27aot1nXh2WefNVJSUoymTZsaJ5xwgmNrsAQGsP15+eWXHWMqKyuNzMxMIykpyYiJiTFOO+00Y926dS7XKSkpMcaOHWu0bNnSiI2NNYYNG2b88ssvtfxpwot7EKP7HBofffSRkZqaasTExBjHHXecMWvWLJfndZ9DY8+ePcbNN99sHHnkkUazZs2Mo48+2rj77ruN0tJSxxjd6+B98cUXtv+bfOWVVxqGEbp7unv3buPyyy83mjdvbjRv3ty4/PLLjYKCgmrPP8IwDKN6uRwRERGR2qeaGBEREQlLCmJEREQkLCmIERERkbCkIEZERETCkoIYERERCUsKYkRERCQsKYgRERGRsKQgRkRERMKSghgREREJSwpiREREJCwpiBEREZGwpCBGREREwtL/A6V9bBZ0snHlAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from MyMLTools.SimpleLinearRegerssion import SimpleLinearRegerssion\n",
    "slr = SimpleLinearRegerssion()\n",
    "slr.fit(x,y)\n",
    "print(slr.a)\n",
    "print(slr.b)\n",
    "y_hat = x * slr.a + slr.b\n",
    "plt.scatter(x,y, s=1)\n",
    "plt.plot(x,y_hat, color='red')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dc184792-005f-4c31-bb6f-28b51d5eee5d",
   "metadata": {},
   "source": [
    "## 2.5 回归算法的评价"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "35b83732-6f0c-445e-ae5b-a744a1d26902",
   "metadata": {},
   "source": [
    "回看之前的公式，我们是要找到 $a$ 和 $b$ 使得以下公式尽可能的小\n",
    "$$\n",
    "\\sum_{i=1}^{m}(y^{(i)}-ax^{(i)}-b)^2\n",
    "$$\n",
    "但是在算法模型拟合的时候，我们使用的是训练数据集，即就是：\n",
    "$$\n",
    "\\sum_{i=1}^{m}(y^{(i)}_{train}-ax^{(i)}_{train}-b)^2\n",
    "$$\n",
    "基于训练数据集的拟合，我们得到 $a$ 和 $b$，那么应用到测试数据集即为：\n",
    "$$\n",
    "\\hat{y}^{(i)}_{test}=ax^{(i)}_{test}+b\n",
    "$$\n",
    "那么衡量回归算法的标准为，即 **误差平方和 SSE**：\n",
    "$$\n",
    "\\sum_{i=1}^{m}(y^{(i)}_{test}-\\hat{y}^{(i)}_{test})^2\n",
    "$$\n",
    "**均方误差 MSE**\n",
    "\n",
    "MSE 计算的是 SSE 的平均值，是为了将误差 “归一化到单个样本”，既消除了样本数量对指标的干扰，又使其在统计意义上更接近 “误差的真实期望”\n",
    "$$\n",
    "\\frac{1}{m}\\sum_{i=1}^{m}(y^{(i)}_{test}-\\hat{y}^{(i)}_{test})^2\n",
    "$$\n",
    "**均方根误差 RMSE**\n",
    "\n",
    "由于 MSE 对误差进行了平方，其数值的量纲与原始数据不同，RMSE 通过开方还原了误差的量纲，使其与真实值和预测值的量纲一致，这样更直观地反映了预测值与真实值之间的平均误差大小 。\n",
    "$$\n",
    "\\sqrt{\\frac{1}{m}\\sum_{i=1}^{m}(y^{(i)}_{test}-\\hat{y}^{(i)}_{test})^2} \\quad\\to \\sqrt{MSE_{test}}\n",
    "$$\n",
    "**平均绝对误差 MAE**\n",
    "\n",
    "MAE 计算的是预测值与真实值之差的绝对值的平均值。相比于 MSE，MAE 没有对误差进行平方操作，所以对异常值的敏感度较低，更能反映预测值与真实值之间误差的平均绝对大小。\n",
    "$$\n",
    "\\frac{1}{m}\\sum_{i=1}^{m}\\left|y^{(i)}_{test}-\\hat{y}^{(i)}_{test}\\right|\n",
    "$$\n",
    "**R Squared**\n",
    "\n",
    "$R^2$ 表示模型对数据的拟合优度，取值范围在 $(-\\infty, 1]$ \n",
    "$$\n",
    "R^2=1-\\frac{SS_{residual}}{SS_{total}}\n",
    "$$\n",
    "\n",
    "- $SS_{residual}$：使用我们的模型预测产生的错误\n",
    "- $SS_{total}$：使用 $y=\\bar{y}$ 预测产生的错误（基准模型）\n",
    "\n",
    "计算结果含义：\n",
    "\n",
    "- 当 $R^2$ 越接近 $1$，表示模型对数据的拟合效果越好，即预测值与真实值越接近\n",
    "- 当 $R^2=0$ 时，说明模型的预测效果和取均值的效果一样\n",
    "- 当 $R^2 < 0$ 时，说明模型还不如直接使用均值进行预测，此时很有可能我们的数据不存在任何线性关系\n",
    "\n",
    "公式变形：\n",
    "$$\n",
    "R^2=1-\\frac{(\\sum_{i=1}^{m}(\\hat{y}^{(i)}-y^{(i)})^2)/m}{(\\sum_{i=1}^{m}(y^{(i)}-\\bar{y})^2)/m} \\quad\\to\\quad1-\\frac{MSE(\\hat{y},y)}{Var(y)}\n",
    "$$\n",
    "\n",
    "**可视化解释**\n",
    "> 展示了原始数据点、真实回归线和模型预测的回归线，了解数据的整体分布和模型拟合情况。\n",
    "\n",
    "<img src=\"https://zh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20250824105805378.png\" alt=\"image-20250824105805378\" style=\"zoom:50%;\" />\n",
    "\n",
    "> 通过红色虚线显示每个数据点的预测误差（真实值与预测值之间的差距），直观展示误差的大小和分布。\n",
    "\n",
    "<img src=\"https://zh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20250824110009111.png\" alt=\"image-20250824110009111\" style=\"zoom:50%;\" />\n",
    "\n",
    "> 比较了每个数据点的绝对误差和平方误差，并通过水平线标记了 MAE、MSE 和 RMSE 的平均值，可以清楚地看到平方误差如何放大较大的误差值。\n",
    "\n",
    "<img src=\"https://zh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20250824110116609.png\" alt=\"image-20250824110116609\" style=\"zoom:50%;\" />\n",
    "\n",
    "> 可视化了 $R^2$ 的含义，通过比较数据点到预测线的距离（$y^{(i)}-\\hat{y}$）与数据点到均值线的距离（$y^{(i)}-\\bar{y}$），展示模型解释数据变异的能力。\n",
    "\n",
    "<img src=\"https://zh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20250824110321013.png\" alt=\"image-20250824110321013\" style=\"zoom:50%;\" />"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2db760d8-7133-449a-bb76-0311889de47e",
   "metadata": {},
   "source": [
    "## 2.6 评价方法实现"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71873c71-66ba-40c5-887f-07b2f9849209",
   "metadata": {},
   "source": [
    "**（1）准备波士顿房价数据**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "cf87d142-15de-4643-a960-9a4d9181e2bd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(506,)\n",
      "(506,)\n"
     ]
    },
    {
     "data": {
      "image/png": "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fPnll9EekuOtX78eN9xwA773ve+hd+/euO6667By5cpoDyvmtLW1YdWqVbjvvvviZkNOq4wdOxbvvfceDh48CAD49NNPsX37dtx+++1RHpmzXbx4Ee3t7UhJSelye2pqKrZv3y58HM6ARNHatWuxd+9e3etmpG7kyJF49dVXceWVV+LEiRNYvHgxRo8ejf379yMrKyvaw3OsL7/8EsuXL8cjjzyCJ554Art27cL/+T//B263Gz/84Q+jPbyY8eabb+L06dP40Y9+FO2hON78+fPR2NiIq6++GomJiWhvb8cvf/lLTJ8+PdpDc7T09HQUFxdj0aJFuOaaa5CTk4M1a9bgo48+QkFBgfiBJIqKr776Surdu7dUUVHhv238+PHSww8/HL1BxagzZ85IOTk50q9//etoD8XRkpKSpOLi4i63/fSnP5VGjRoVpRHFpokTJ0rf/va3oz2MmLBmzRrpiiuukNasWSN99tln0quvviplZmZKL7/8crSH5niHDx+Wxo0bJwGQEhMTpRtvvFGaOXOmdM011wgfgzMgUbJnzx6cPHkS119/vf+29vZ2bNu2DWVlZWhtbWXipEk8Hg+GDh2KQ4cORXsojpabm4vCwsIut11zzTV47bXXojSi2HP06FFs3rwZr7/+erSHEhMeffRRPP7445g2bRoAYOjQoTh69CiWLl2Ke+65J8qjc7ZBgwZh69ataGlpQVNTE3Jzc/H9738f+fn5wsdgABIlt956K/bt29fltnvvvRdXX3015s+fz+DDRK2trfj888/xrW99K9pDcbQxY8bgiy++6HLbwYMH0b9//yiNKPa89NJL6N27tz9pksJz9uxZJCR0TXVMTExkGa6JPB4PPB4PGhoa8M477+DZZ58V/l0GIFGSnp6OoqKiLrd5PB5kZWV1u530+dnPfoYpU6agX79+OHnyJBYvXoympiZ+4wnTvHnzMHr0aCxZsgT/9E//hF27dmHFihVYsWJFtIcWEzo6OvDSSy/hnnvuQY8e/Gg2w5QpU/DLX/4S/fr1w5AhQ/DJJ5/gueeew3333RftoTneO++8A0mScNVVV+Hw4cN49NFHcdVVV+Hee+8VP4h1K0SkF3NAzPH9739fys3NlZKSkqS8vDzprrvukvbv3x/tYcWEt956SyoqKpLcbrd09dVXSytWrIj2kGLGO++8IwGQvvjii2gPJWY0NTVJDz/8sNSvXz8pJSVFGjhwoPTkk09Kra2t0R6a4/3nf/6nNHDgQCk5OVny+XzS7NmzpdOnT+s6hkuSJMmyEImIiIgoBPYBISIioohjAEJEREQRxwCEiIiIIo4BCBEREUUcAxAiIiKKOAYgREREFHEMQIiIiCjiGIAQERFRxDEAISIioohjAEJEREQRxwCEiIiIIo4BCBEREUXc/wOtT7Zy6fWRGgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "boston = pd.read_csv('boston.csv')\n",
    "# 房屋数量与房价的问题\n",
    "x = boston['RM']\n",
    "y = boston['MEDV']\n",
    "print(x.shape)\n",
    "print(y.shape)\n",
    "# 去掉边界最值\n",
    "x = x[y < 50.0]\n",
    "y = y[y < 50.0]\n",
    "plt.scatter(x,y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d4808f35-72f3-40e6-ba70-7b19c4c65b5f",
   "metadata": {},
   "source": [
    "**（2）对算法模型进行拟合**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "86b9c8cc-d5c0-4f46-ac7d-e18db110b334",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "7.8608543562689555\n",
      "-27.459342806705543\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.array(x)\n",
    "y = np.array(y)\n",
    "from MyMLTools.train_test_split import train_test_split\n",
    "x_train, x_test,y_train, y_test = train_test_split(x,y,test_radio=0.2,seed=666)\n",
    "from MyMLTools.SimpleLinearRegerssion import SimpleLinearRegerssion\n",
    "slr = SimpleLinearRegerssion()\n",
    "slr.fit(x_train, y_train)\n",
    "print(slr.a)\n",
    "print(slr.b)\n",
    "plt.scatter(x_train, y_train)\n",
    "plt.plot(x_train, slr.predict(x_train), color='r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "538ffe27-1dfa-40f7-9e3d-2349a8795aae",
   "metadata": {},
   "source": [
    "**（3）均方误差 MSE**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "c69a4c86-2ddd-4a88-aa7d-9022629be76a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24.156602134387438\n"
     ]
    }
   ],
   "source": [
    "y_predict = slr.predict(x_test)\n",
    "mse = np.sum((y_test - y_predict)**2) / len(y_test)\n",
    "print(mse)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "484c62ef-e57d-4f4d-932a-af133edb26db",
   "metadata": {},
   "source": [
    "**（4）均方根误差 RMSE**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "592f2d8f-7933-4c8b-92b5-ff398929aa2b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4.914936635846635\n"
     ]
    }
   ],
   "source": [
    "rmse = mse ** 0.5\n",
    "print(rmse)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b4ea741f-e6d7-453b-89ab-ce97875a0112",
   "metadata": {},
   "source": [
    "**（5）平均绝对误差 MAE**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "8649f31c-7e1c-469c-b25a-b447d16a650a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.5430974409463873\n"
     ]
    }
   ],
   "source": [
    "mae = np.sum(np.absolute(y_test - y_predict)) / len(y_test)\n",
    "print(mae)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3c2ad0ca-5470-4282-a35d-31f074b6e5c2",
   "metadata": {},
   "source": [
    "**（6）R Squared**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "29f50e4e-3b77-464c-988f-43c22650fd41",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6129316803937322\n"
     ]
    }
   ],
   "source": [
    "r_squared = 1 - mse / np.var(y_test)\n",
    "print(r_squared)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6289329d-da08-4df6-8a50-32ac5b4eff08",
   "metadata": {},
   "source": [
    "**（7）自定义封装起来**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7f0299a5-c260-450f-b2bc-6617bd5c615a",
   "metadata": {},
   "source": [
    "> [MyMLTools/metrics.py](MyMLTools/metrics.py)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4933e24f-3a77-44f2-b7fc-612b72b413df",
   "metadata": {},
   "source": [
    "**（8）测试使用**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "1b21a4ed-324e-490b-872c-e817fde7da46",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24.156602134387438\n",
      "4.914936635846635\n",
      "3.5430974409463873\n",
      "0.6129316803937322\n"
     ]
    }
   ],
   "source": [
    "from MyMLTools.metrics import *\n",
    "print(mean_squared_error(y_test, y_predict))\n",
    "print(root_mean_squared_error(y_test, y_predict))\n",
    "print(mean_absolute_error(y_test, y_predict))\n",
    "print(r2_score(y_test, y_predict))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d61848b-ffef-4d58-a2ec-6a6caa3ce6f9",
   "metadata": {},
   "source": [
    "**（9）sklean中的评价方法**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "6a2d0ffd-7df3-4b29-8910-1853825c9a83",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24.156602134387438\n",
      "3.5430974409463873\n",
      "0.6129316803937324\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.metrics import mean_absolute_error\n",
    "from sklearn.metrics import r2_score\n",
    "print(mean_squared_error(y_test, y_predict))\n",
    "print(mean_absolute_error(y_test, y_predict))\n",
    "print(r2_score(y_test, y_predict))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7804d2c-845f-45fc-801d-794b83028d8f",
   "metadata": {},
   "source": [
    "**（10）将r2_score封装进自定义SimpleLinearRegression里**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "09bf1b5a-319b-44b4-800c-6bcd1cca4236",
   "metadata": {},
   "source": [
    "> [MyMLTools/SimpleLinearRegerssion.py](MyMLTools/SimpleLinearRegerssion.py)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b2a58b42-fc49-4dc4-91f8-7488e1234f53",
   "metadata": {},
   "source": [
    "**（11）测试使用**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "323b0c44-ddb1-4e3f-be4f-7d3e6ab2a3ce",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6129316803937322\n"
     ]
    }
   ],
   "source": [
    "from MyMLTools.SimpleLinearRegerssion import SimpleLinearRegerssion\n",
    "slr = SimpleLinearRegerssion()\n",
    "slr.fit(x_train, y_train)\n",
    "print(slr.score(x_test, y_test))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c29d5b4-e2ec-4fd4-8029-b4c289b1c8cc",
   "metadata": {},
   "source": [
    "## 2.7 多元线性回归"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8270eabe-b3ca-4603-8695-f10e3f0d9cac",
   "metadata": {},
   "source": [
    "多元线性回归是线性回归模型的扩展形式，核心是研究一个因变量（目标变量）与多个自变量（特征变量）之间的线性关系，并通过这些自变量的线性组合来预测因变量的取值。\n",
    "\n",
    "在简单线性回归中，假设我们找到了最佳拟合的直线方程为：\n",
    "$$\n",
    "y=ax+b\n",
    "$$\n",
    "那么在多元线性回归中，假设我们找到了最佳拟合的直线方程为：\n",
    "$$\n",
    "y = \\theta_0 + \\theta_1 x_1 + \\theta_2 x_2 + \\ldots + \\theta_n x_n\n",
    "$$\n",
    "那么预测值为：\n",
    "$$\n",
    "\\hat{y}^{(i)} = \\theta_0 + \\theta_1 X_1^{(i)} + \\theta_2 X_2^{(i)} + \\ldots + \\theta_n X_n^{(i)}\n",
    "\\newline\n",
    "其中\\quad{x}^{(i)} = \\left( X_1^{(i)}, X_2^{(i)}, \\ldots, X_n^{(i)} \\right)\n",
    "$$\n",
    "我们的目标是，使得下面的公式尽可能小：\n",
    "$$\n",
    "\\sum_{i=1}^{m}(y^{(i)}-\\hat{y}^{(i)})^2\n",
    "$$\n",
    "那么就是找到 $\\theta_0, \\theta_1, \\theta_2, \\ldots, \\theta_n$ 使得上面的公式尽可能小\n",
    "\n",
    "针对 $\\hat{y}^{(i)}$ 的处理，定义两个矩阵：\n",
    "\n",
    "- 系数矩阵：$\\theta = (\\theta_0, \\theta_1, \\theta_2, \\ldots, \\theta_n)^T$\n",
    "- 特征矩阵：$X^{(i)} = \\left( X_0^{(i)}, X_1^{(i)}, X_2^{(i)}, \\ldots, X_n^{(i)} \\right)$\n",
    "\n",
    "则：\n",
    "$$\n",
    "\\hat{y}^{(i)} = \\theta_0 X_0^{(i)} + \\theta_1 X_1^{(i)} + \\theta_2 X_2^{(i)} + \\ldots + \\theta_n X_n^{(i)}, \\quad X_0^{(i)} \\equiv 1\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\hat{y}^{(i)} = X^{(i)} \\cdot \\theta\n",
    "$$\n",
    "\n",
    "亦可改进一下：\n",
    "$$\n",
    "X_b = \\begin{pmatrix} \n",
    "1 & X_1^{(1)} & X_2^{(1)} & \\ldots & X_n^{(1)} \\\\\n",
    "1 & X_1^{(2)} & X_2^{(2)} & \\ldots & X_n^{(2)} \\\\\n",
    "\\ldots &  &  & \\ldots &  \\\\\n",
    "1 & X_1^{(m)} & X_2^{(m)} & \\ldots & X_n^{(m)} \n",
    "\\end{pmatrix}, \\quad \n",
    "\\theta = \\begin{pmatrix} \\theta_0 \\\\ \\theta_1 \\\\ \\theta_2 \\\\ \\ldots \\\\ \\theta_n \\end{pmatrix}\n",
    "\\newline\n",
    "\\newline\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\hat{y} = X_b \\cdot \\theta\n",
    "$$\n",
    "那么，目标使得下面公式尽可能小\n",
    "$$\n",
    "\\sum_{i=1}^{m}(y^{(i)}-\\hat{y}^{(i)})^2\n",
    "$$\n",
    "变为使得下面公式尽可能小\n",
    "$$\n",
    "(y - X_b \\cdot \\theta)^T (y - X_b \\cdot \\theta)\n",
    "$$\n",
    "根据最小二乘法，得出：\n",
    "$$\n",
    "\\theta = (X_b^T X_b)^{-1} X_b^T y\n",
    "$$\n",
    "这个公式为 **多元线性回归的正规方程解**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b6b9b91-65e2-4982-8460-f8425cb5fb18",
   "metadata": {},
   "source": [
    "## 2.8 多元线性回归的实现"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "27de5aa3-dfe0-4168-9df2-d4e566bbf97c",
   "metadata": {},
   "source": [
    "**（1）准备数据**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "ff644984-a430-4df1-9c55-45eeaab29ab3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "506 14\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn import datasets\n",
    "import pandas as pd\n",
    "# sklearn中已经移除该数据，此处从本地加载 来源 Kaggle\n",
    "boston = pd.read_csv('boston.csv')\n",
    "row,col = boston.shape\n",
    "print(row, col)\n",
    "X = boston.iloc[:,:-1]\n",
    "y = boston.iloc[:,-1]\n",
    "X = X[y < 50.0]\n",
    "y = y[y < 50.0]\n",
    "X = np.array(X)\n",
    "y = np.array(y)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "760f80aa-331e-4738-a4de-321db8fb0fce",
   "metadata": {},
   "source": [
    "**（2）自定义LinearRegression**\n",
    "> [MyMLTools/LinearRegression.py](MyMLTools/LinearRegression.py)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5de7250c-85ca-43a4-8244-8ae7a29b91d6",
   "metadata": {},
   "source": [
    "**（3）使用测试**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "085789e6-c277-4176-90f8-a67df8c7fa2b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-1.20354261e-01  3.64423279e-02 -3.61493155e-02  5.12978140e-02\n",
      " -1.15775825e+01  3.42740062e+00 -2.32311760e-02 -1.19487594e+00\n",
      "  2.60101728e-01 -1.40219119e-02 -8.35430488e-01  7.80472852e-03\n",
      " -3.80923751e-01]\n",
      "34.11739972320593\n",
      "0.8129794056212907\n"
     ]
    }
   ],
   "source": [
    "from MyMLTools.train_test_split import train_test_split\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,test_radio=0.2,seed=666)\n",
    "from MyMLTools.LinearRegression import LinearRegression\n",
    "lr = LinearRegression()\n",
    "lr.fit_normal(X_train, y_train)\n",
    "print(lr.coef_)\n",
    "print(lr.interception)\n",
    "print(lr.score(X_test,y_test))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "69e16814-d1f5-42c3-8c06-04926ee43980",
   "metadata": {},
   "source": [
    "**（4）使用sklearn中的内容**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "62c29da9-01ae-4aca-a830-aba3ae357089",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-1.20354261e-01  3.64423279e-02 -3.61493155e-02  5.12978140e-02\n",
      " -1.15775825e+01  3.42740062e+00 -2.32311760e-02 -1.19487594e+00\n",
      "  2.60101728e-01 -1.40219119e-02 -8.35430488e-01  7.80472852e-03\n",
      " -3.80923751e-01]\n",
      "34.11739972322954\n",
      "0.8129794056212809\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666,test_size=0.2)\n",
    "from sklearn.linear_model import LinearRegression\n",
    "lr = LinearRegression()\n",
    "lr.fit(X_train, y_train)\n",
    "print(lr.coef_)\n",
    "print(lr.intercept_)\n",
    "print(lr.score(X_test, y_test))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
